
    jeb(                       d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 ddl
 ddl d dlZd d	lmZmZmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ 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&m'Z' d dl( d dl)Z)d dl*m+Z+ d dl,Z,ddl-m.Z. d dl/m0Z0 d dl1Z1d dl2 ddl3 d dl4m5Z5m6Z6 d dl7 d dl8m9Z9 d dl:Z:d dl;m<Z< d dl=Z=d dl>m?Z? d dl@mAZA d dlmBZB ej                  ZDej                  ZF eAeDeF      ZGej                  ZId ZJd ZKd ZLd  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[d= Z\ G d> d?e      Z] G d@ dAe      Z^ G dB dCe      Z_ G dD dEe      Z` G dF dGe      Za G dH dIe      Zb G dJ dKe      Zc G dL dMe      Zd G dN dOe      Ze G dP dQe      Zf G dR dSe      Zg G dT dUe      Zh G dV dWe      Zi G dX dYe      Zj G dZ d[e      Zk G d\ d]e      Zl G d^ d_e      Zm G d` dae      Zn G db dce      Zo G dd dee      Zp G df dge      Zq G dh die      Zr G dj dke      Zs G dl dme      Ztd dnlumvZv  G do dpe      Zw G dq dre      Zx G ds dte      Zy G du dve      Zz G dw dxe      Z{ G dy dze      Z|d{ Z} G d| d}e      Z~ G d~ de      Z	  G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z	  G d de      Z G d de      Z	  G d de      Z G d de      Z G d deBj                        Zy)    )message)render)APIView)Responsestatus   )*N)datetime	timedeltadate)settings)authenticate)User)RefreshToken)django_pbkdf2_sha256)render_to_string)mail)EmailMultiAlternatives)messages)forms)get_authorization_header)authenticated)FileSystemStorage)ContentSerializerFAQSerializer)FortuneTellerSerializer)Q)FCMNotification)Client)genericsc                    d}t        |      }d}t        j                  j                  | j                        d   }t               }t        |      t        |      z   }|j                  ||       }t        |      dz   |z   S )Nzmedia/user_profile)locationz/media/user_profiler	   /)r   ospathsplitextnamerandomStringFunctionForImagestrsave)imagefullPathfs	fullPath2filetypetheNametheImageNamefilenames           //var/www/html/Ryun_Seer/seer/seer_user/views.pyuploadTheProfiler5   1   sq    
* GGUZZ(+	%	''l3x=(GGL%(Is8##    c                     t         j                  j                         j                         } | rV| j                  sy| j                  }|dd  }t        |      dz   }t        |      }|j                  d      }dt        |      z   S y)N
APOIN00001   r	   APOIN)FortuneAppointmentBookobjectsalllastappointment_idintr*   zfilllastObjtheIds     r4   generateAppointmentrE   =   sy    
 
(
(
,
,
.
3
3
5			
%ab	%E
1%E
%A%	U		r6   c                     t         j                  j                         j                         } | rV| j                  sy| j                  }|dd  }t        |      dz   }t        |      }|j                  d      }dt        |      z   S yNTRANS000001r9   r	   TRANS)FortuneTellerTranscationsr<   r=   r>   transcation_idr@   r*   rA   rB   s     r4   generateTranscationsIdFortunerL   M   sy    
#
+
+
/
/
1
6
6
8			
%ab	%E
1%E
%A%	U		r6   c                     t         j                  j                         j                         } | rV| j                  sy| j                  }|dd  }t        |      dz   }t        |      }|j                  d      }dt        |      z   S yrG   )SeerUserTranscationr<   r=   r>   rK   r@   r*   rA   rB   s     r4   generateTranscationsIdrO   ]   sy    

%
%
)
)
+
0
0
2			
%ab	%E
1%E
%A%	U		r6   c                       e Zd Zd Zy)Registerc           	         	 |j                   }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|st        ddit        j                  	      S |st        dd
it        j                  	      S |st        ddit        j                  	      S |st        ddit        j                  	      S |st        ddit        j                  	      S t        j                  |      }	t        j                  j                  |      j                         }
|
rt        ddit        j                  	      S |rMt        j                  j                  |      j                         }|st        ddit        j                  	      S t        j                  j                  |||||	t                     }
|rHt        j                  j                  |      j                         }|rt        j                  j                         j                         }t         j                  j                  |
|j"                         t         j                  j                  |      j                         }|rCt%        |j&                        t%        |j"                        z   }||_        |j)                          n+t         j                  j                  ||j"                         t*        j                  j                  dd|
       t-        j.                  |
      }|j0                  }dt3        |      z   }t4        j6                  |z   }||
_        |
j)                          d}t;        dd|i      }|}t4        j<                  }|}t?        j@                  ||||g|       tB        j                  j                  |dz   |z   dz   d        t        dd!i      S # tD        $ r0}t        dt3        |      it        jF                  	      cY d }~S d }~ww xY w)"N
first_name	last_nameemailpassworddate_of_birthget_referal_coder   email is requiredr   first_name is requiredlast_name is requiredpassword is requireddate_of_birth is requiredrU   The email is already registered)referal_codezInvalid referal code)rS   rT   rU   rW   rV   r`   	seer_useramountrb   z1You have received your referal bonus successfullyreferal_bonusr   notification_typerb   z/seer_user/email-verify?token=Verify Accountzemail_verifcation.htmllinkhtml_message z3 seer user has been succesfully registered with us.seer_user_registerr   typezGYou have been successfully registered with us.Please verify your email.)$datagetr   r   HTTP_400_BAD_REQUESThandlerhashSeerUserr<   filterfirstHTTP_409_CONFLICTcreategenerate_referral_codeGeneralSettingsr=   SeerUserWalletrefer_friend_offr@   rc   r+   SeerUserNotificationsr   for_useraccess_tokenr*   r   BASE_URLemail_verification_linkr   EMAIL_HOST_USERr   	send_mailAdminNotifications	ExceptionHTTP_500_INTERNAL_SERVER_ERROR)selfrequestrp   rS   rT   rU   rV   rW   rX   new_passwordseer_user_obj
check_codere   check_wallet
new_amountverify_tokentokenverify_linkcomplete_linksubjectrk   plain_message
from_emailtoes                            r4   postzRegister.postn   s   <T
,,4&:xx$988G5hhz"888O,=hh12
Y236;V;VWW
Y78@[@[\\
Y67v?Z?Z[[
Y56f>Y>YZZ
Y:;6C^C^__,,x(<##***7==?=Y@AIaIabb""))7G)HNNPZy!78@X@XYY$$++zI\ap}  HT  bx  bz+  {M""))7G)HNNPZ%--11399;m##m=CaCa#b#++22z2JPPRl	++,s=3Q3Q/RRz'|$$zA_A_$`##**3f  zI  Ta*  b((7L%%E2SZ?K%%k1M,1M)G#$<v}>UVL M))J	BNN7M:t,W%%jnY.FG|.|  CW%  X
Igh
ii	 T
Ic!f%V-R-R
SSTsK   BP P 2P P 0P A!P 1AP  IP 	Q %P;5Q ;Q N__name__
__module____qualname__r    r6   r4   rQ   rQ   m   s    =Tr6   rQ   c                       e Zd Zd Zy)SocialLoginc                 Z   	 |j                   }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }	|r|st        dd	it        j                  
      S |st        ddit        j                  
      S |st        ddit        j                  
      S |st        ddit        j                  
      S |st        ddit        j                  
      S |st        ddit        j                  
      S |	st        ddit        j                  
      S t
        j                  j                  |      j                         }
|
j                  dk(  rt        ddit        j                  
      S |
s/t
        j                  j                  |||||||	t                     }
t        j                  |
      }|
j                  |
j                  |
j                   |
j"                  |
j$                  |
j&                  t)        |      t)        |j*                        d}t        d|d      S # t,        $ r0}t        dt)        |      it        j.                  
      cY d }~S d }~ww xY w)Nprovider_idrU   rS   rT   	social_iddevice_type	fcm_tokenr   z$Provider and social_id are required.r   rZ   r[   rY   zdevice_type is requiredzfcm_token is required)r   r	   AThis account has been deleted.For more information contact admin.)rS   rT   r   r   rU   r   r   r`   idrS   rT   rU   rW   is_profile_completedrefreshaccessSuccessr   rp   )rp   rq   r   r   rr   ru   r<   rv   rw   account_deletedry   rz   r   r   r   rS   rT   rU   rW   r   r*   r   r   r   )r   r   rp   r   rU   rS   rT   r   r   r   r   refresh_tokenallDatar   s                 r4   r   zSocialLogin.post   sn   ?V
,,4-(;88G5&:xx$9xx$9-(;xx$9
YY FGPVPkPkll
Y 89&B]B]^^
Y 78A\A\]]
Y 34V=X=XYY
Y 34V=X=XYY
Y 9:6C^C^__
Y 78A\A\]] ##**Y*?EEG=##q(Y cdms  nI  nI  J  J
$$++zYbkU{Ydzd| , ~M$  ((7=!!**((  "00)>>M"=--.	7 y':
;;	 V
Is1v&v/T/T
UUVsP   B#I1 &I1 I1 $I1 I1 "I1 I1  AI1 :B6I1 1	J*:%J%J*%J*Nr   r   r6   r4   r   r      s	    @Vr6   r   c                       e Zd Zd Zy)LoginMobilec                 `   	 |j                   }|j                  d      }|j                  d      }|j                  d      }|j                  d      }t        j                  ddd      }|st	        dd	it
        j                  
      S |st	        ddit
        j                  
      S ||z   }t        j                  j                  |      j                         }	|	r,|	j                  dk(  rt	        ddit
        j                  
      S |	s)t        j                  j                  |t                     }	||	_        ||	_        ||	_        |	j#                          d|	j                  i}
t	        d|
d      S # t$        $ r0}t	        dt'        |      it
        j(                  
      cY d }~S d }~ww xY w)Ncountry_codephone_numberr   r   i  i'  r9   r   country_code is requiredr   phone_number is required)r   r	   r   )r   r`   otpr   r   )rp   rq   random	randranger   r   rr   ru   r<   rv   rw   r   ry   rz   r   r   r   r+   r   r*   r   )r   r   rp   r   r   r   r   the_otpmobile_numberr   userDatar   s               r4   r   zLoginMobile.post   s    T
,,4((>*<((>*<xx$9-(;D$*7
Y9:&B]B]^^
Y9:&B]B]^^,.=##***FLLN=$$)i!dent  oJ  oJ  K  K
$$++TjTl+mM=&=*= 
-

8 ix8
99	 T
Ic!f%V-R-R
SSTs2   BE4 E4 'A E4 A+E4 4	F-=%F("F-(F-Nr   r   r6   r4   r   r      s    !Tr6   r   c                       e Zd Zd Zy)emailVerificationc                     	 |j                   j                  d      }t        j                  j	                  |      j                         }d|_        |j                          t        |d      S # t        $ r}t        |d      cY d }~S d }~ww xY w)Nr   )r   Tzemail_verification_success.htmlzemail_verfication_failed.html)
GETrq   ru   r<   rv   rw   email_verifiedr+   r   r   )r   r   r   customer_Objr   s        r4   rq   zemailVerification.get  s{    :;;??7#5""))E)JPPR<!%<
:
;;
 :
8
99:s   A+A. .	B7BBBNr   r   r   rq   r   r6   r4   r   r     s    :r6   r   c                       e Zd Zd Zy)OtpVerificationc           
      v   	 |j                   }|j                  d      }|j                  d      }|j                  d      }|st        ddit        j                        S |st        ddit        j                        S |st        ddit        j                        S ||z   }	 t
        j                  j                  ||	      }t        j                  |      }	|j                  |j                  |j                  |j                  |j                  |j                  t!        |	      t!        |	j"                        d}
t        d|
d      S # t        $ r(}t        d
i dt        j                        cY d }~S d }~ww xY 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   zotp is required)r   r   zInvalid otpr   r   r   )rp   rq   r   r   rr   ru   r<   r   r   r   r   rS   rT   rU   rW   r   r*   r   r   )r   r   rp   r   r   r   r   r   r   r   r   s              r4   r   zOtpVerification.post$  s   T4((>*<((>*<	%3
Y9:&B]B]^^
Y9:&B]B]^^
Y019T9TUU,.=\$$((m(LM  ((7=!!))''!//(===!-,,-7 iw7
88  \}B7v?Z?Z[[\ 
 T
Ic!f%V-R-R
SSTsa   AE?  E? ?E? E? $!E BE? 	E<E71E<2E? 7E<<E? ?	F8%F3-F83F8Nr   r   r6   r4   r   r   #      Tr6   r   c                       e Zd Zd Zy)	LoginUserc           
      P   	 |j                   }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|st        ddit        j                        S |st        ddit        j                        S t
        j                  j                  |	      j                         }|d
k(  rt        ddit        j                        S t
        j                  j                  |dd      j                         }|st        ddit        j                        S |j                  dk(  rt        ddit        j                        S |j                  }	t        j                  ||	      }
|j                   dk(  rt        ddit        j                        S |
r||_        ||_        |j'                          t)        j*                  |      }|j,                  |j.                  |j0                  |j2                  |j4                  |j6                  t9        |      t9        |j:                        d}t        d|d      S t        ddit        j                        S # t<        $ r0}t        dt9        |      it        j>                        cY d }~S d }~ww xY w)NrU   rV   r   r   r   rY   r   r\   r^   r   z:This email does not exist in our database, please registerT)rU   r   end_date__isnullz=Your account has not been activated, Please contact to admin.r	   r   FzPlease verify your email firstr   zLogin Successfullyr   zInvalid password) rp   rq   r   r   rr   ru   r<   rv   countHTTP_404_NOT_FOUNDrw   HTTP_401_UNAUTHORIZEDr   rV   rs   verifyr   r   r   r+   r   r   r   rS   rT   rU   rW   r   r*   r   r   r   )r   r   rp   rU   rV   r   r   useruserObjcheck_passwordcheckr   r   r   s                 r4   r   zLoginUser.postE  sb   (T
,,488G5hhz"8xx$9-(;
Y236;V;VWW
Y56f>Y>YZZ"""/5574
aiY[\djd}d}~~%%Et%TZZ\7
Y^_gm  hD  hD  E  E"Y cdms  nI  nI  J  J$$>>>(>25%Y?@HcHcdd!G%GLLN ))'2M**$$""]]**#88M"=--.	G 37CDDY12&:V:VWW	 T
Ic!f%V-R-R
SSTsL   A.I, 1I, AI,  AI, /+I, AI, )B%I, I, ,	J%5%J J% J%Nr   r   r6   r4   r   r   D      )Tr6   r   c                       e Zd Zd Zy)SeerUserForgetPasswordc           	         	 |j                   }|j                  d      }|st        ddi      S t        j                  j                  |      j                         }|dk(  rt        ddi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      }|}t&        j0                  }|}t3        j4                  |
|||g|       t        ddi      S t        ddi      S c c}w # t6        $ r;}t9        |       t        dt#        |      it        j:                        cY d }~S d }~ww xY w)NrU   r   Email is requiredr^   r   zPThis email does not exist in our database, please enter the valid email address.r       z/seer_user/forgot/r$   zForgot Passwordzforget_password_email.htmlri   rj   z8Reset password link has been sent to this email address.zEmail not exists)rp   rq   r   ru   r<   rv   r   r   r   rw   joinranger   choicestringascii_lettersdigitsr*   rU   r   r   forgot_password_linkr+   r   r   r   r   r   printr   )r   r   rp   rU   r   r   nran_numbaselinkcompletelinkr   rk   r   r   r   r   s                   r4   r   zSeerUserForgetPassword.postr  s   U<<DHHWEi 3455##%#0668Dqyi rs  |B  |U  |U  V  V&&U&399;GwwUZ[]U^_U^PQf&:&:V]]&JKU^_`W%GMM(::S@7JX))*X5\$,W!\\^ W$%AFLCYZ\!]**Z
R	^^G]J<Xi Z[\\i 2344 `  U	!HYs1v&f.S.STTUsC   +F7 AF7 >AF7 ;F2B#F7 %F7 2F7 7	G; 0G60G;6G;Nr   r   r6   r4   r   r   q  s    Ur6   r   c                       e Zd Zd Zd Zy)forgetPasswordVerificationc                    t        | j                  j                        }|j                  d      d   }t        j
                  j                  |      j                         }|j                  dk(  rt        |d      S t        j
                  j                  ||      j                         }|rd}nd}t        |d	d
|i      S )Nr$   r^   
LinkExpiryzlink-expire.html)rU   r   TFforgot.htmlvalid)
r*   r   r&   splitru   r<   rv   rw   r   r   )r   r   ri   
user_emaillink_expiryuser_objr   s          r4   rq   zforgetPasswordVerification.get  s    	T\\	$zz#r"*  ''
';AAC+%%5
+
,,$$ZPT$U[[](55	wuo	66r6   c                 \   t        j                  |j                        }|j                         r|j                  j                  d      }|j                  j                  d      }t        | j                  j                        }|j                  d      d   }t        j                  |      }t        j                  j                  |      j                         }|r@||_        d|_        |j%                          t'        j(                  |d       t+        |d      S y t+        |d	d
|i      S )Nr   confirm_new_passwordr$   r^   r   zChanged successfullyzpassword_success.htmlr   form)r   forgetverificationPOSTis_validcleaned_datarq   r*   r   r&   r   rs   rt   ru   r<   rv   rw   rV   r   r+   r   successr   )	r   r   r   r   r   ri   r   encrypt_passwordr   s	            r4   r   zforgetPasswordVerification.post  s    		!	!',,	/$	]]_##''7<++//0FG
dll
 4

3#:ll<0%%j%9??A8(H$0H!MMOW45'122  -&$
88r6   Nr   r   r   rq   r   r   r6   r4   r   r     s    79r6   r   c                       e Zd Zd Zy)
GetHobbiesc                 @   	 t         j                  j                  dd      }g }|D ],  }|j                  |j                  d}|j                  |       . t        d|d      S # t        $ r0}t        dt        |      it        j                        cY d }~S d }~ww xY w)NTr   r   )r   hobbyr   r   r   r   )Hobbiesr<   rv   r   r  appendr   r   r*   r   r   )r   r   hob_objr   hoball_datar   s          r4   rq   zGetHobbies.get  s    T__##44#H77s
&&YYH NN8  iw7
88	 T
Ic!f%V-R-R
SSTs   A!A$ $	B-%BBBNr   r   r6   r4   r   r         Tr6   r   c                       e Zd Zd Zy)SeerUserHelpSupportc                    	 	 t        |      }t        j                  j                  |      j                         }|j                  }|j                  d      }|j                  d      }|st        ddit        j                        S |st        ddit        j                        S t        j                  j                  |||       t        j                  j                  |j                   dz   |j"                  z   d	z   d
       t        ddi      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j$                        cY d }~S d }~ww xY w)Nr   r   r   titleztitle is requiredzmessage is required)r  r   rb   rl   z seer user has a help & supportseer_user_help_supportrn   zMYour request has been submitted successfully. We will revert you back sortly.)r   r   r   r*   r   r   ru   r<   rv   rw   rp   rq   rr   HelpSupportry   r   rS   rT   r   )r   r   uidr   r   rp   r  r   s           r4   r   zSeerUserHelpSupport.post  sa   VN

 C &&C&06688
,,488G5XXi 7
Y236;V;VWW
Y45V=X=XYYE'HM$$X-@-@-DXEWEW-WXy-y  @X$  Y
Imn
oo  NYA'0L0LMMN 
 ViA'v/T/TUUVsT   D A:E 	E (A,E 	E%E	EE 	EE 	F
%F?F
F
Nr   r   r6   r4   r	  r	        Vr6   r	  c                       e Zd Zd Zy)getLifestyleQuestionc                     	 t         j                  j                  d      }i }|D ]V  }|j                  j                  }||vr|g d||<   |j
                  }|j                  }||   d   j                  ||d       X dt        |j                               i}t        j                  |d      }	t        j                  |	      }t        d	|d
      S # t        $ r0}
t        dt        |
      it         j"                        cY d }
~
S d }
~
ww xY w)NTr   )questionoptionsr  )	option_idoption_valuequestion_dict),:)
separatorsr   r   r   r   )LifestyleOptionsr<   rv   lifestyle_questionquestion_titler   optionr  listvaluesjsondumpsloadsr   r   r*   r   r   )r   r   question_objr  r  question_namer  option_datanew_feature_dictjson_feature_dictr   s              r4   rq   zgetLifestyleQuestion.get  s   T"**11T1J<=x//>>MM)%]=!
 I//K- +22 4   " ']-A-A-C(DEzz"2zJjj!23
i/?@
AA	 T
Ic!f%V-R-R
SSTs   CC 	D%DDDNr   r   r6   r4   r  r    s    Tr6   r  c                       e Zd Zd Zy)
getProfilec                    	 	 t        |      }t        j                  j                  |      j                         }|st        ddit        j                        S t        |      j                  }t        d|d      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j                        cY d }~S d }~ww xY w)Nr   r   r  user not foundr   r   )r   r   r   r*   r   r   ru   r<   rv   rw   r   SeerUserSerializerrp   r   )r   r   r  r   r   r   s         r4   rq   zgetProfile.get  s    TL

 C ##**c*288:=
Y 01&:S:STTm,117
iw7
88  LYs1v&f.J.JKKL 
 T
Ic!f%V-R-R
SSTsM   A> AB: "B: >	B7%B2,B7-B: 2B77B: :	C3%C.(C3.C3Nr   r   r6   r4   r,  r,    r  r6   r,  c                       e Zd Zd Zy)SeerUserCompleteProfilec                 r
   	 	 t        |      }t        j                  j                  |      j                         }|st        ddit        j                        S |j                  }|j                  d      }|j                  d      }|j                  d      }|j                  d      }	|j                  d	      }
|j                  d
      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }t        j                  j                  |      j                  |j                        j                         }|rt        ddit        j                        S |st        ddit        j                         S |st        ddit        j                         S |st        ddit        j                         S |	st        ddit        j                         S |
st        ddit        j                         S |st        ddit        j                         S |st        ddit        j                         S |st        ddit        j                         S |st        dd it        j                         S |st        dd!it        j                         S t#        t$        |
j'                  d"            \  }}}t)        ||      }t+        |      }t-        |      }t.        j                  j                  |#      j                         }t0        j                  j                  |$      j                         }t2        j                  j                  |%      j                         } t4        j                  j7                  |||| &      }!||_        ||_        |
|_        ||_        |	|_         ||_!        ||_"        ||_#        ||_$        ||_%        ||_&        ||_'        ||_(        ||_)        ||_*        ||_+        d'|_,        t[               |_.        ||_/        |ja                          t        dd(i      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        jb                        cY d }~S d }~ww xY w))Nr   r   r  r.  rS   rT   rU   genderrW   religion
professionheightcountry_originstatecity	languageshobbiesbio	educationincometimezoner^   r_   rY   rZ   r[   gender is requiredr]   timezone is requiredcountry_origin is requiredstate is requiredcity is requiredlanguages is required-)	horoscope)chinese_zodiac)element_name)rb   rG  rH  five_elementTr   )2r   r   r   r*   r   r   ru   r<   rv   rw   r   rp   rq   excluder   rx   rr   mapr@   r   get_astrological_signget_chinese_zodiacget_five_element	HoroscopeChineseZodiacFiveElementsSeerUserSignDetailry   rS   rT   rW   rU   r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r   generate_strip_iduser_stripe_idr?  r+   r   )"r   r   r  r   r   rp   rS   rT   rU   r3  rW   r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  check_emailyearmonthdayrG  zodiacelementhoroscope_objchinese_objelements_objsign_details"                                     r4   r   zSeerUserCompleteProfile.post  s   gVN

 C ##**c*288:=
Y 01&:S:STT
,,4&:xx$988G5HHX688O,=hhz"8&:HHX6HH-.>88G5
((6
4xx$9XXi 7	%3xx$9HHX6hhz"8!!((u(5==AQAQ=RXXZ;Y@AIaIabb
Y 34V=X=XYY
Y 89&B]B]^^
Y 78A\A\]]
Y 45f>Y>YZZ
Y ;<VE`E`aa
Y 67@[@[\\ Y <=fFaFabb
Y 34V=X=XYY
Y 23F<W<WXX
Y 78A\A\]] #}223784$S%09t$6d#7$$++i+@FFH=''..f.EKKM;&&--7-CIIK<#++22]Ub l 3 <;(=&=!.== =$=(= ="0===&="==&= =(,=%"3"5=$=
Iy)
**E  NYA'0L0LMMNF 
 V
Is1v&v/T/T
UUVs   S AS= FS= /S= S= -S= S= +S= 
S= )S= S= 'S= S= %FS= 	S:
%S5/S:0S= 5S::S= =	T6%T1+T61T6Nr   r   r6   r4   r1  r1    s	    hVr6   r1  c                       e Zd Zd Zy)SeerUserEditProfilec                    	 	 t        |      }t        j                  j                  |      j                         }|st        ddit        j                        S |j                  }|j                  d      }|j                  d      }|j                  d      }|j                  d      }	|j                  d	      }
|j                  d
      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|st        ddit        j                        S |st        ddit        j                        S |st        ddit        j                        S |st        ddit        j                        S |st        ddit        j                        S |st        ddit        j                        S |st        ddit        j                        S |st        ddit        j                        S ||_        ||_        ||_        |	|_        |
|_        ||_        ||_        ||_        ||_        ||_        ||_        ||_        ||_        ||_        ||_        |j;                          t        ddi      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j<                        cY d }~S d }~ww xY w)Nr   r   r  r.  rS   rT   r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  rZ   r[   r@  rA  rB  rC  rD  rE  r   )r   r   r   r*   r   r   ru   r<   rv   rw   r   rp   rq   rr   rS   rT   r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r+   r   )r   r   r  r   r   rp   rS   rT   r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  s                        r4   r   zSeerUserEditProfile.posty  s   ]VN

 C ##**c*288:=
Y 01&:S:STT
,,4&:xx$9HHX6hhz"8&:HHX6HH-.>88G5
((6
4xx$9XXi 7	%3xx$9HHX6hhz"8
Y 89&B]B]^^
Y 78A\A\]]
Y 45f>Y>YZZ
Y 67@[@[\\ Y <=fFaFabb
Y 34V=X=XYY
Y 23F<W<WXX
Y 78A\A\]], )=&= =$=(= ="0===&="==&= =$=
Iy)
**q  NYA'0L0LMMNr 
 V
Is1v&v/T/T
UUVs   K$ AL  D)L  L  $L  L  "L  L   L  ?L  BL  $	L-%LLL  LL   	M)%MMMNr   r   r6   r4   ra  ra  x  s	    ^Vr6   ra  c                 B    t        t        |       | j                        S )N)key)maxsetr   )lsts    r4   most_commonrh    s    CH#))$$r6   c                       e Zd Zd Zy)AddMbtic                    	 	 t        |      }t        j                  j                  |      j                         }|st        ddit        j                        S t        |j                  j                  d            }t        d|       |st        ddit        j                        S t        t!        |            }t        |j                  j                  d            }t        d|       |st        ddit        j                        S t        t!        |            }t        |j                  j                  d	            }	t        d	|	       |	st        dd
it        j                        S t        t!        |	            }
t        |j                  j                  d            }t        d|       |st        ddit        j                        S t        t!        |            }||z   |
z   |z   }t"        j                  j                  |d      j                         }t$        j                  j                  |      j'                  |       t        dd|j(                   d| dd      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j*                        cY d }~S d }~ww xY w)Nr   r   r  r.  extraversion_introversionz%extraversion_introversion is requiredsensing_intuitionzsensing_intuition is requiredthinking_feelingzthinking_feeling is requiredjudging_perceivingzfourth array is requiredT)	mbti_namer   rd   )mbtir   zYou are (z) type!r   )r   r   r   r*   r   r   ru   r<   rv   rw   r   rp   rq   r   rr   rh  evalMBTIrS  updatetagliner   )r   r   r  r   r   rl  first_pair_mbtirm  second_pair_mbtirn  third_pair_mbtiro  fourth_pair_mbticreated_mbti
fetch_mbtis                  r4   r   zAddMbti.post  s   *VN

 C ##**c*288:=
Y 01&:S:STT"7<<#3#34O#PQ	$%>?
#Y GHQWQlQlmm &?!@A?7<<++,?@A	./
Y ?@IdIdee!$'8"9:',,**+=>?	,-
Y >?HcHcdd &6!78?GLL,,-ABC	01
Y :;FD_D_``!$'9":;!$44FIYY<##PT#U[[]:$$$?FFjFZ
y(:;M;M:NaP\~]d0eg
hhI  NYA'0L0LMMNL 
 V
Is1v&v/T/T
UUVsj   I0 AJ, AJ, *A"J, A"J, 0A"J, BJ, 0	J)9%J$J)J, $J))J, ,	K%5%K K% K%Nr   r   r6   r4   rj  rj    s    +Vr6   rj  c                       e Zd Zd Zy)UploadImagesc                    	 	 t        |      }t        j                  j                  |      j                         }|st        ddit        j                        S |j                  }|j                  d      }g }|D ]  }t        |      }	|j                  |	         |j                  s!||_        |d   |_        |j#                          t        d|d      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j$                        cY d }~S d }~ww xY w)	Nr   r   r  r.  imagesr   r   r   )r   r   r   r*   r   r   ru   r<   rv   rw   r   rp   getlistr5   r  r  primary_imager+   r   )
r   r   r  r   r   rp   r  
image_urlsr,   
image_paths
             r4   r   zUploadImages.post,  s0   VN

 C ##**c*288:=
Y 01&:S:STT
,,4LL"6:u!%(Jj! 
 

%M",Q-M
y
;
<<+  NYA'0L0LMMN, 
 V
Is1v&v/T/T
UUVsN   C AD A<D 	D!%DDD DD 	E%EEENr   r   r6   r4   r~  r~  +  s    Vr6   r~  c                       e Zd Zd Zy)
EditImagesc                 >   	 	 t        |      }t        j                  j                  |      j                         }|st        ddit        j                        S |j                  }|j                  d      }||_        |d   |_        |j                          t        d|d      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY 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   r*   r   r   ru   r<   rv   rw   r   rp   rq   r  r  r+   r   )r   r   r  r   r   rp   r  s          r4   r   zEditImages.postJ  s    VN

 C ##**c*288:=
Y 01&:S:STT
,,4&:$=!+A=
y
;
<<  NYA'0L0LMMN 
 V
Is1v&v/T/T
UUVsN   B' AC# AC# '	C 0%CC C# C  C# #	D,%DDDNr   r   r6   r4   r  r  I  r  r6   r  c                       e Zd Zd Zy)RemoveImagec                    	 	 t        |      }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!                  t"        j$                  |      }t        j                  j'                  |      rt        j(                  |       t        j                  j                  |      j                         }t+        j,                  |j.                        }	g }
|j1                  dd      }t3        |       |	D ]-  }t        |      |k7  st3        |       |
j5                  |       / t        j                  j                  |      j7                  |
	       t        dd
i      S t        ddit        j                        S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j8                        cY d }~S d }~ww xY w)Nr   r   r  r.  r,   zimage is required'r   )r  zImage deleted successfully.zImage not found.)r   r   r   r*   r   r   ru   r<   rv   rw   r   rp   rq   rr   r%   r&   r   r   
MEDIA_ROOTexistsremoveastliteral_evalr  replacer   r  ru  r   )r   r   r  r   r   rp   
image_namer  user_obj_imageuser_images	form_datayimgs                r4   r   zRemoveImage.post  s   VN

 C ##**c*288:=
Y 01&:S:STT
,,4!:
Y236;V;VWWX00*=:ggnnZ IIj%%,,,>DDFN##N$9$9:KI3r"A	!HCACjs  }-44i4HY =>??Y 23F<U<UVV3  NYA'0L0LMMN4 
 V
Is1v&v/T/T
UUVsa   G1 AH- ;H- C!H- 9AH- H- 1	H*:%H%H* H- %H**H- -	I&6%I!I&!I&Nr   r   r6   r4   r  r    s    Vr6   r  c                       e Zd Zd Zy)SeerUserDeleteAccountc                 \   	 	 t        |      }t        j                  j                  |      j                         }|st        ddit        j                        S |j                          t        j                  j                  |j                  dz   |j                  z   dz   d       t        dd	i      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j                         cY d }~S d }~ww xY w)
Nr   r   r  r.  rl   z$ seer user has deleted their accountr  rn   zAccount deleted successfully)r   r   r   r*   r   r   ru   r<   rv   rw   r   deleter   ry   rS   rT   r   )r   r   r  r   r   s        r4   rq   zSeerUserDeleteAccount.get  s   VN

 C ##**c*288:=
Y 01&:S:STT$$]-E-Ec-I-JaJa-a  cI  .I  Og$  h
I=>
??  NYA'0L0LMMN 
 V
Is1v&v/T/T
UUVsN   B6 AC2 AC2 6	C/?%C*$C/%C2 *C//C2 2	D+;%D& D+&D+Nr   r   r6   r4   r  r    s    Vr6   r  c                       e Zd Zd Zy)
GetUserFaqc                 <   	 t         j                  j                  dd      j                  d      }t	        |d      j
                  }t        d|d      S # t        $ r;}t        |       t        dt        |      it        j                  	      cY d }~S d }~ww xY w)
NTr   )r   ro   -idmanyr   r   r   r   )Faqr<   rv   order_byr   rp   r   r   r   r*   r   r   )r   r   faq_objr  r   s        r4   rq   zGetUserFaq.get  s    T[[$FCLLUS7G.338
ix8
99	 T8
Ic!f%V-R-R
SSTs   AA 	B 0BBBNr   r   r6   r4   r  r    s    Tr6   r  c                       e Zd Zd Zy)GetUserBlogc                    	 t         j                  j                  d      j                         }t	        |      j
                  }t        d|d      S # t        $ r0}t        dt        |      it        j                        cY d }~S d }~ww xY w)NBlog)	page_typer   r   r   r   ContentManagementr<   rv   rw   r   rp   r   r   r*   r   r   r   r   content_objr   r   s        r4   rq   zGetUserBlog.get  sx    T#++22V2DJJL;[)..7
iw7
88	 T
Ic!f%V-R-R
SSTs   AA 	B%BBBNr   r   r6   r4   r  r        Tr6   r  c                       e Zd Zd Zy)GetUserPrivacyPolicyc                     	 t         j                  j                  dd      j                         }t	        |      j
                  }t        d|d      S # t        $ r0}t        dt        |      it        j                        cY d }~S d }~ww xY w)NzPrivacy Policyr   r  	user_typer   r   r   r   r  r  s        r4   rq   zGetUserPrivacyPolicy.get  s|    T#++22=MX^2_eeg;[)..7
iw7
88	 T
Ic!f%V-R-R
SST   AA 	B%BBBNr   r   r6   r4   r  r    r  r6   r  c                       e Zd Zd Zy)GetUserTermsc                     	 t         j                  j                  dd      j                         }t	        |      j
                  }t        d|d      S # t        $ r0}t        dt        |      it        j                        cY d }~S d }~ww xY w)NzTerms & conditionsr   r  r   r   r   r   r  r  s        r4   rq   zGetUserTerms.get  s|    T#++22=Q\b2ciik;[)..7
iw7
88	 T
Ic!f%V-R-R
SSTr  Nr   r   r6   r4   r  r    r  r6   r  c                       e Zd Zd Zy)FortuneTellerListc                    	 	 t        |      }t        j                  j                  |      j                         }|st        ddit        j                        S |j                  }|j                  d      }|j                  d      }|j                  d      }|j                  d      }	|j                  d	      }
t               }|r*|j                  t        |
      t        j                         |r*|j                  t        |      t        j                         |r*|j                  t        |      t        j                         |	r-|
r+|j                  t        |	|
      t        j                         t         j                  j                  |dd      }t#        |dd|i      j$                  }	 t         j                  j                  ddd      }t#        |d      j$                  }	 t&        j                  j                  dd      }t)        |d      j$                  }|||t+        j,                  |j.                        d}t        d|d      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j0                        cY d }~S d }~ww xY w)Nr   r   r  r.  servicelanguageskills
min_rating
max_rating)services__contains)languages__contains)skills__contains)rating__gterating__lteT)r   r   rb   r  context)	is_onliner   r   r  r   )fortune_tellersonline_fortune_tellersservicesr:  r   r   )r   r   r   r*   r   r   ru   r<   rv   rw   r   query_paramsrq   r   addANDFortuneTellerr   rp   ServiceServiceSerializerr  r  r:  r   )r   r   r  r   r   rp   r  r  r  r  r  lookupsfortune_teller_objfortuner_dataonline_fortuner  r  serialized_servicesr   s                      r4   rq   zFortuneTellerList.get   sR   (TL

 C ##**c*288:=
Y 01&:S:STT


4XXi 7hhz"8HHX6&:&:S7KKW-quu5KKh/7KK6*AEE2ZKKjjA155I%--44Wdhl4m*+=4Q\^kPlmrr=6!))004QUko0p>1.dKPP8oo$$D4$H8*8$?DD#3"  !8!89	7 iw8
99G  LYs1v&f.J.JKKLH 
 T
Ic!f%V-R-R
SSTsN   I AJ G>J 	J#%JJ	J JJ 	K%K
K
KNr   r   r6   r4   r  r    r   r6   r  c                       e Zd Zd Zy)FortuneTellerDetailc                 8   	 	 t        |      }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                         }t        |d|i      j                   }t"        j                  j                  |	      }	t%        |	d
      j                   }
t        d||
d      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j&                        cY d }~S d }~ww xY w)Nr   r   r  r.  r   id is requiredrb   r  fortune_tellerTr  r   )r   rp   reviews)r   r   r   r*   r   r   ru   r<   rv   rw   r   r  rq   rr   r  r   rp   FortunetellerRatingReviewsFortunerTellerReviewSerializerr   )r   r   r  r   r   rp   
fortune_idr  r   
review_objreview_datas              r4   rq   zFortuneTellerDetail.get,  se   TL

 C ##**c*288:=
Y 01&:S:STT


4:
Y/09T9TUU%--44
4CIIK"#5{M>Z[``7 +22999T:/
EJJ;
iwM
NN/  LYs1v&f.J.JKKL0 
 T
Ic!f%V-R-R
SSTsT   D$ AE  ;E  BE  $	E-%EEE  EE   	F)%FFFNr   r   r6   r4   r  r  +  r   r6   r  c                       e Zd Zd Zy)FavUnfavouriteFortunec                 v   	 	 t        |      }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!                  ||d      \  }}|s|j#                          t        dd	i      S |j%                          t        dd
i      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j&                        cY d }~S d }~ww xY w)Nr   r   r  r.  fortune_teller_idFortune teller id is requiredr	   )fortunerb   is_favouritezRemoved from favourite listzAdded to favourite list.)r   r   r   r*   r   r   ru   r<   rv   rw   r   rp   rq   rr   r  FavouriteUnfavouriteFortuneget_or_creater  r+   r   )	r   r   r  r   r   r  fortune_objfavourite_postcreateds	            r4   r   zFavUnfavouriteFortune.post  s   TN

 C ##**c*288:=
Y 01&:S:STT||''(;<
Y ?@IdIdee&&--1B-CIIK;
Y ?@IdIdee8@@NNWbmz  IJN  K>7
Y<=>>Y9:;;#  NYA'0L0LMMN$ 
 T
Ic!f%V-R-R
SSTsa   E AE? 9E? AE? "AE? &E? 	E<%E71E<2E? 7E<<E? ?	F8%F3-F83F8Nr   r   r6   r4   r  r    s    Tr6   r  c                       e Zd Zd Zy)FortuneFavListingc                    	 	 t        |      }t        j                  j                  |      j                         }|st        ddit        j                        S t        j                  j                  |d      }g }|D ]_  }t        j                  j                  |j                  j                  d      }t        |d	      j                   }	|j#                  |	       a t        d
|d      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j$                        cY d }~S d }~ww xY w)Nr   r   r  r.  r	   )rb   r  Tr   r   r  r   r   )r   r   r   r*   r   r   ru   r<   rv   rw   r   r  r  r  r   r   rp   extendr   )
r   r   r  r   r   fav_objall_Datafavr  r   s
             r4   rq   zFortuneFavListing.get  s8   VN

 C ##**c*288:=
Y 01&:S:STT(0077-^_7`78s&..55Z^5_%&8tDIIGOOG 
 y(;
<<  NYA'0L0LMMN  
 V
Is1v&v/T/T
UUVsN   C0 AD, BD, 0	D)9%D$D)D, $D))D, ,	E%5%E E% E%Nr   r   r6   r4   r  r    s    Vr6   r  c                       e Zd Zd Zy)	ContactUsc           	      `   	 |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 |j                   j                  d      }|st        dd
it        j                        S d}t        d|||||d      }|}	t        j                  }
|}t        j                  ||	|
|g|       t        ddi      S # t        $ r0}t        dt        |      it        j                        cY d }~S d }~ww xY w)NrS   r   zFirst name is requiredr   rT   zLast name is requiredrU   r   r   zMessage is requiredrh   zcontact_us_email.html)rS   rT   rU   r   r   rj   r   )rp   rq   r   r   rr   r   r   r   r   r   r   r*   r   )r   r   rS   rT   rU   r   r   r   rk   r   r   r   r   s                r4   r   zContactUs.post  s   T  .:
Y 89&B]B]^^||,9
Y 78A\A\]]<<G$5
Y 34V=X=XYY,,"">2<
Y 34V=X=XYY\\i(7
Y 56v?Z?Z[[7"#::bkty  JV  ah  =i  j<=((:2>>'=*rdV
Ii(
))	 T
Ic!f%V-R-R
SSTs;   9E4 9E4 69E4 09E4 *9E4 $AE4 4	F-=%F("F-(F-Nr   r   r6   r4   r  r    s    Tr6   r  c                       e Zd Zd Zy)UserResetPasswordc                    	 	 t        |      }t        j                  j                  |      j                         }|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                  }t        j                   ||      }|d	k(  rt        dd
it        j"                        S |}	t        j$                  |	      }
|
|_        |j'                          t        ddi      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j(                        cY d }~S d }~ww xY w)Nr   r   r  r.  old_passwordzold password is requiredr   znew password is requiredFzOld password is incorrectr   )r   r   r   r*   r   r   ru   r<   rv   rw   r   rp   rq   rr   rV   rs   r   HTTP_403_FORBIDDENrt   r+   r   )r   r   r  r   r   r  r   r   r   rV   r   s              r4   r   zUserResetPassword.post  s   TN

 C ##**c*288:=
Y 01&:S:STT,,"">2<
Y9:&B]B]^^,,"">2<
Y9:&B]B]^^!**>>>,~65unY:;6C\C\]]8ll8,,=
Ii(
)))  NYA'0L0LMMN* 
 T
Ic!f%V-R-R
SSTs`   E AF
 9F
 9F
 AF
 :F
 	F%F<F=F
 FF
 
	G%F>8G>GNr   r   r6   r4   r  r    s    Tr6   r  c                       e Zd Zd Zy)GetNotificationSettingsc                 x   	 	 t        |      }t        j                  j                  |      j                         }|st        ddit        j                        S |j                  j                  d      }|st        ddit        j                        S ||_        |j                          t        d|j                  d      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j                         cY d }~S d }~ww xY w)	Nr   r   r  r.  notification_dataznotification data is requiredr   r   )r   r   r   r*   r   r   ru   r<   rv   rw   r   rp   rq   rr   notification_statusr+   r   )r   r   r  r   r   r  s         r4   r   zGetNotificationSettings.post  s   TN

 C ##**c*288:=
Y 01&:S:STT||''(;<
Y>?vGbGbcc'8=$
i}/P/PQ
RR  NYA'0L0LMMN 
 T
Ic!f%V-R-R
SSTsS   C AD  9D  .D  	C=%C82C=3D  8C==D   	D9	%D4.D94D9Nr   r   r6   r4   r   r     s    Tr6   r   c                       e Zd Zd Zy)GetUserNotificationsc                 P   	 	 t        |      }t        j                  j                  |      j                         }|st        ddit        j                        S t        j                  j                  |d      j                  d      }t        |d      j                  }t        d	|d
      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j                        cY d }~S d }~ww xY w)Nr   r   r  r.  T)rb   r   r  r  r   r   )r   r   r   r*   r   r   ru   r<   rv   rw   r   r~   r  UserNotificationSerializerrp   r   )r   r   r  r   r   notification_objr  s          r4   rq   zGetUserNotifications.get  s   TN

 C ##**c*288:=
Y 01&:S:STT+33::}hl:mvvw|}()9tDII8
ix8
99  NYA'0L0LMMN 
 T
Ic!f%V-R-R
SSTsN   B0 AC, AC, 0	C)9%C$C)C, $C))C, ,	D%5%D D% D%Nr   r   r6   r4   r  r        Tr6   r  c                       e Zd Zd Zy)DeleteUserNotificationsc                 z   	 	 t        |      }t        j                  j                  |      j                         }|j                  j                  d      }|st        ddit        j                        S t        j                  j                  |      j                  t        j                                 t        ddi      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j"                        cY d }~S d }~ww xY w)Nr   r   r  r   r  )end_dater   )r   r   r   r*   r   r   ru   r<   rv   rw   rp   rq   rr   r~   ru  r   nowr   )r   r   r  r   r   notification_ids         r4   rq   zDeleteUserNotifications.get$  s   TN

 C ##**c*288:=\\%%d+?
Y/08S8STT  ''?';BBHLLNB[
Ii(
))  NYA'0L0LMMN 
 T
Ic!f%V-R-R
SSTsN   C A'D 6AD 	C>%C93C>4D 9C>>D 	D:
%D5/D:5D:Nr   r   r6   r4   r  r  #  r	  r6   r  c                       e Zd Zd Zd Zy)FortuneBookAppointmentc                    	 	 t        |      }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                  |d      j                         }t        d	|j                  d
      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY 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  Tr  r   )r   r  )r   r   r   r*   r   r   ru   r<   rv   rw   r   r  rq   rr   r  r  r   )r   r   r  r   r   r  fortune_servicess          r4   rq   zFortuneBookAppointment.get5  s)   TN

 C ##**c*288:=
Y 01&:S:STT++//0CD
Y>?vGbGbcc#++226GY]2^ddf
i3C3L3LM
NN  NYA'0L0LMMN 
 T
Ic!f%V-R-R
SSTsT   C AD 9D AD 	D%%D
DD DD 	E!%EEEc                 R	   	 	 t        |      }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                  |d      j                         }t               }|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                  |
      j                         }|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"                  }t$        j                  j                  |      j                         }t'        j(                  |	d      }|t+        t-        d            z   }|j/                  d      }t0        j                  j3                  |||||	dz   |z   ||||	      }t4        j                  j3                  ||j6                  dz   |j8                  z   dz   d       d|j:                  i}|j<                  r|j>                  }t        t@        jB                        }|jD                  d k(  r@dd!|j6                  dz   |j8                  z   dz   d"}tG        |#      jI                  ||$      }|jD                  d%k(  rcd&}|j6                  dz   |j8                  z   dz   }dd!|j6                  dz   |j8                  z   dz   d"}tG        |#      jI                  ||||'      }t        d(|d)      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        jJ                        cY d }~S d }~ww xY w)*Nr   r   r  r.  r  r  Tr  appointment_datezAppointment date is requiredappointment_timezAppointment time is requiredservice_namezservice is required)r  zNo service foundservice_typezService type is requiredpricezPrice is requiredr  %I:%M %p   minutesrF  )	r?   r  rb   r  r  r  r  r  r?  rl   z booked an appointment.appointment_booking)r  r   rg   r?   AndroidBOOKED APPOINTMENTro   r  r   api_keyregistration_iddata_messageIos)r   r%  message_titlemessage_bodyr&  r   r   )&r   r   r   r*   r   r   ru   r<   rv   rw   r   rp   rq   rr   r  rE   r  r?  FortuneTellerTimingr   strptimer   r@   strftimer;   ry   FortuneTellerNotificationsrS   rT   r   r  r   r   FIREBASE_SERVER_KEYr   r   notify_single_devicer   )r   r   r  r   r   r  r  generate_appointmentr  r  r  service_objr  r  r?  time_objtime	time_slot
taken_timebook_appointment_objrp   r%  
server_keyr&  resultr)  r*  s                              r4   r   zFortuneBookAppointment.postG  s   UTN

 C ##**c*288:=
Y 01&:S:STT||''(;<
Y>?vGbGbcc&&--1BTX-Y__a;-/ll&&'9:
Y=>fFaFabbll&&'9:
Y=>fFaFabb,,"">2<
Y45V=X=XYY''|'DJJL;
Y12&:U:UVV,,"">2<
Y9:&B]B]^^<<G$5
Y236;V;VWW$$8!))000LRRT8


,j
94iB009"":.:088??Ocs~  JW  iy  K[  ^a  Ka  dn  Kn5( @ T( %%,,kS`SkSkloSop}  qH  qH  TH  Ib  Tb  uJ,  K),,4 %%!++OX112J)+4)$//3M4K4KKLee\
 j1FFWf  wCF  DV%'*]"--c1-2I2IIJcc\4)%004]5L5LLMff\ j1FFWf  wD\ G ;V it4
55a  NYA'0L0LMMNb 
 T
Ic!f%V-R-R
SSTsz   P1 AQ- 9Q- A2Q- 9Q- 9Q- <AQ- 	9Q- 9Q- =G3Q- 1	Q*:%Q%Q* Q- %Q**Q- -	R&6%R!R&!R&Nr   r   r6   r4   r  r  4  s    T$VTr6   r  c                       e Zd Zd Zy)GetBookingListc                 V   	 	 t        |      }t        j                  j                  |      j                         }|st        ddit        j                        S |j                  j                  d      }|st        ddit        j                        S |dk(  r3t        j                  j                  dd	g|
      j                  d      }nAt        j                  j                  |      j!                  dd	g      j                  d      }t#        |d      j$                  }t        d|d      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j&                        cY d }~S d }~ww xY w)Nr   r   r  r.  booking_typezBooking type is requiredUpcomingPendingAccepted)appointment_status__inrb   r  rd   )rA  Tr  r   r   )r   r   r   r*   r   r   ru   r<   rv   rw   r   r  rq   rr   r;   r  rK  AppointmentFortuneTellerrp   r   )r   r   r  r   r   r=  appoint_objr  s           r4   rq   zGetBookingList.get  s   TN

 C ##**c*288:=
Y 01&:S:STT&&**>:<
Y9:&B]B]^^j (0077PY[eOfq~7  I  I  JO  PK(0077-7PXXqz  }G  qHX  I  R  R  SX  YK&{=BB8
ix8
99  NYA'0L0LMMN 
 T
Ic!f%V-R-R
SSTsT   D3 AE/ 9E/ BE/ 3	E,<%E'!E,"E/ 'E,,E/ /	F(8%F#F(#F(Nr   r   r6   r4   r;  r;        Tr6   r;  c                       e Zd Zd Zy)GetBookingDetailsc                    	 	 t        |      }t        j                  j                  |      j                         }|j                  j                  d      }|st        ddit        j                        S t        j                  j                  ||      }|st        ddit        j                        S t        |d	      j                  }t        d
|d      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j                         cY d }~S d }~ww xY w)Nr   r   r  
booking_idzBooking Id is required)rb   r   No appointment foundTr  r   r   )r   r   r   r*   r   r   ru   r<   rv   rw   r  rq   rr   r;   rB  rp   r   )r   r   r  r   r   rH  rC  r  s           r4   rq   zGetBookingDetails.get  s'   VN

 C ##**c*288:=%%)),7:
Y78@[@[\\'//66R\6];
Y56f>Y>YZZ&{=BB8
ix8
99  NYA'0L0LMMN 
 V
Is1v&v/T/T
UUVsS   C A'D 6?D 6$D 	D$%D	D
D DD 	E %EEENr   r   r6   r4   rF  rF    s    Vr6   rF  c                       e Zd Zd Zy)AddMoneyToWalletc                 `   	 	 t        |      }t        j                  j                  |      j                         }|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 d
}	t        |j                  |j                   t#        |      |	      }
|
d   dk(  r|j$                  j                         }|r/|xj&                  t#        |      z  c_        |j)                          n!t*        j                  j-                  ||       t.        j                  j-                  |j0                  dz   |j2                  z   dz   d       t        ddi      S y # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t4        j6                  j8                  $ 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  rc   zamount is requiredcard_idcard_id is requiredr   rb   No card found is requiredtruer   Tra   rl   z' seer user added money to their wallet.seer_user_walletrn   z"Money added to wallet successfully)r   r   r   r*   r   r   ru   r<   rv   rw   rp   rq   rr   SeerUserCardspaymentWithExistingCardthe_user_striperM  r@   walletrc   r+   r|   ry   r   rS   rT   stripeerror	CardErrorr   )r   r   r  r   r   rp   rc   rM  card_objcapture_valuethePaymentObjrR  s               r4   r   zAddMoneyToWallet.post  s]   4VN

 C ##**c*288:=
,,4 HHX6
Y34F<W<WXX\\i(7
Y 56v?Z?Z[[##**g*DJJL8
Y ;<VE`E`aa=*8+C+CHDTDTUXY_U`ano=H% %++113F+"" #  %%m.F.Fs.J=KbKb.b  dM  /M  Se%  fY DEFF- &+  NYA'0L0LMMNZ 
		 L
Is1v&v/J/J
KK	 V
Is1v&v/T/T
UUVsm   G- A)H) 89H) 2AH)  C+H) -	H&6%H!H&H) !H&&H) )J-%I1+J-1J-=%J("J-(J-Nr   r   r6   r4   rK  rK    s    5Vr6   rK  c                       e Zd Zd Zy)GetWalletDetailc                    	 	 t        |      }t        j                  j                  |      j                         }t        j                  j                  |      j                         }t        |      j                  }t        j                  j                  |d      d d }t        |d	      j                  }t        d
|d      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j                        cY d }~S d }~ww xY w)Nr   r   r  rd   rV  )rb   payment_mode   Tr  r   r   )r   r   r   r*   r   r   ru   r<   rv   rw   r|   SeerUserWalletSerializerrp   rN   WalletTranscationSerializerr   )	r   r   r  r   r   wallet_detail
serializerwallet_transcationtranscation_serializers	            r4   rq   zGetWalletDetail.get  s   VN

 C ##**c*288:= "))00=0IOOQ=(7<<:+33::}ck:lmonop78JPTUZZ
y*=
>>  NYA'0L0LMMN 
 V
Is1v&v/T/T
UUVsG   C B9D 	D%C<6D7D <DD 	D=%D82D=8D=Nr   r   r6   r4   r^  r^    r  r6   r^  c                       e Zd Zd Zy)WalletAllTranscationc                    	 	 t        |      }t        j                  j                  |      j                         }|j                  j                  d      }|st        ddit        j                        S |dk(  rHt        j                  j                  |d      j                  d      }t        |d	
      j                   }n|dk(  rHt        j                  j                  |d      j                  d      }t        |d	
      j                   }nFt        j                  j                  |      j                  d      }t        |d	
      j                   }t        d|d      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j"                        cY d }~S d }~ww xY w)Nr   r   r  transcation_typeztranscation_type is requiredpay)rb   rk  r  Tr  refundrd   r   r   )r   r   r   r*   r   r   ru   r<   rv   rw   r  rq   rr   rN   r  rc  rp   r   )r   r   r  r   r   rk  rf  rg  s           r4   rq   zWalletAllTranscation.get  s   VN

 C ##**c*288:=**../AB
Y=>fFaFabb%,44;;hm;nwwx}~89KQUV[[H$,44;;hp;qzz  |A  B89KQUV[[,44;;;V__`ef89KQUV[[
y0FG
HH%  NYA'0L0LMMN( 
 V
Is1v&v/T/T
UUVsN   E$ A'F  6C-F  $	F-%FFF  FF   	G)%GGGNr   r   r6   r4   ri  ri    s    Vr6   ri  )r?  c                       e Zd Zd Zd Zy)getFortuneTimeSlotc                     d}|}t        j                  |d      }|j                  d      }|dz   |z   }	t        j                  |	|      }
|j                  |
      }
|
j	                  |      }
|
j                  |      S )N%Y-%m-%d %I:%M %p%d %B %Y%Y-%m-%drl   )r   r,  r-  localize
astimezone)r   time_struser_timezonefortune_timezoner   time_format	date_part
input_datenew_date_formatcombined_timer4  s              r4   convert_time_to_user_timezonez0getFortuneTimeSlot.convert_time_to_user_timezone  s~    #+)  J7* ''
3/!C'(2-			=+	6$		"	"4	($		'$	{	##r6   c                 
   	 	 t        |      }t        j                  j                  |      j                         }| j                  j                  j                  d      }| j                  j                  j                  d      }| j                  j                  j                  d      }t        j                  |j                        }t        j                         j!                  |      }	|	j#                  d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                        }t-        j.                  |
j0                        }t3        t4        j                  j                  ||ddg      j7                  dd            }g }t9        j:                  |d      j=                         }t?        dd      D ]  }|tA        |      z   }|jC                  d      }g }|D ]  }|d   |jC                  d      k(  s|d   s!|d   d| jE                  |d   |||      | jE                  |d   |||      | jE                  |d   |||      | jE                  |d   |||      |d   |d   |d   d	}|jG                  |        |jG                  ||d         tI        d!|       g }|D ]  }|d   }|d"   }|D ]  }|d   s
d#D ]p  }| d$}| d%}||   }||   }|s|st9        j:                  |d&      }t9        j:                  |d&      }||k  sP|jC                  d'      } |jC                  d(      }!d}"t9        j:                  t        |      d)      }#t9        j:                  |!d(      jC                  d(      d*z   |#jC                  d+      z   }$t9        j:                  |$d)      |	k  rd,}"|D ]A  }%|%jK                  d-      \  }&}'| |&jM                         k\  s+| |'jM                         k  s?d,}" n |jG                  | |!|"|d   |d   |d   d.       |tA        tO        |d         /      z  }||k  r!s   |D cg c]  }|d0   |jC                  d(      k(  s| }(}t        d1|(d2      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY wc c}w # t        $ r0}t        dt        |      it        jP                        cY d }~S d }~ww xY w)3Nr   r   r  r  rY  r   r   )microsecondtzinfozfortune_teller is requiredr  zFortune timing data not foundr?  r@  )r  r  rA  r  T)flatrr     )daysz%A	is_activemorning_openingmorning_closingevening_openingevening_closing
chat_pricevideo_pricesession_time)	rY  r  r  r  r  r  r  r  r  )r   converted_slotsz%converted_slots_all_days------------0r  )morningevening_opening_closingrq  r  rs  z%Y-%m-%d %H:%M:%Srl   z%H:%M:%SFrF  )TimeDate	Availabler  r  r  r  r  r   r   ))r   r   r   r*   r   r   ru   r<   rv   rw   r   r  rq   pytzr?  r  ru  r  rr   r+  r   r  r#  r%  slotsr!  r;   values_listr   r,  r   r   r   r-  r~  r  r   r   stripr@   r   ))r   r   r  r   r   r  rY  r   rw  current_timer3  rx  timedatabooked_appointmentsconverted_slots_all_daysr{  
day_offsettarget_datetarget_date_strr  slotconverted_slot
open_slotsday_datarp   	slot_typeopening_keyclosing_keyopening_time_strclosing_time_stropening_timeclosing_timer5  	date_slotslot_availablecompare_timedate_time_strbooked_appointmentbooked_start
booked_endselected_date_slotss)                                            r4   rq   zgetFortuneTimeSlot.get  s   UVN

 C ##**c*288:=LL--112BC>		"	"	&	&u	-3
,,
#
#
'
'
/4 ==!7!78=,,.++M:<&&1T&B<
Y <=fFaFabb!))000OUUW8
Y ?@IbIbccmmH$;$;$D$DEjj(84<<CCSatx  R[  ]g  QhC  i  u  u  vH  OS  u  T  U !!!$
388::2q\zyj99K!**:6OOU{++D11d;6G5k<<TBS=TVceu  xG  H<<TBS=TVceu  xG  H<<TBS=TVceu  xG  H<<TBS=TVceu  xG  H,'=)N+
n ^,  ##'% + "2 		01IJ:+x
6
C01O  , k*k k*kk*k*	.''(8:MN|''(8:MN|L( ))*5	 ))*5	((\):<OP )))Z@II*UX[[^j^s^st~^],?@<O"5$6$<$<S$A	!z++--)j>N>N>P2P .
	 #6 	$n-]+L)
 	 		#d>.B*CDD5 L( -	   ,` ,6i:4fI\I\]gIh9h$:iJ y2EF
GG_  NYA'0L0LMMNT jN 
 V
Is1v&v/T/T
UUVs   S DT AT ,C9T &T ,CT T 1T =CT T AT T +TTT 	T%%T
TT TT 	U&%UUUN)r   r   r   r~  rq   r   r6   r4   ro  ro    s    $ VVr6   ro  c                       e Zd Zd Zy)AddUserCardc           	         	 	 t        |      }t        j                  j                  |      j                         }|st        ddit        j                        S |j                  j                  d      }|st        ddit        j                        S |j                  st               |_        |j!                          |j                  r|j                  }t"        j$                  t&        _        t&        j*                  j-                  ||      }|rIt.        j                  j1                  ||d   |d	   |d
   |d   |d         }t3        |      j                  }	t        d	d      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j4                        cY d }~S d }~ww xY w)Nr   r   r  r.  rM  rN  )sourcer   	exp_monthexp_yearcustomerlast4)rb   rM  r  r  rU  last_digitsr   r   )r   r   r   r*   r   r   ru   r<   rv   rw   r   rp   rq   rr   rU  rT  r+   r   STRIPE_SECRET_KEYrW  r#  Customercreate_sourcerS  ry   SeerUserCardSerializerr   )
r   r   r  r   r   rM  user_id
createCardcardObjalldatas
             r4   r   zAddUserCard.post~  s   VN

 C ##**c*288:=
Y 01&:S:STT\\i(7
Y 56v?Z?Z[[

&
&#4#6M ""**G//FN..wg.FJ $$++mJW[L\gqr}g~  IS  T^  I_  pz  {E  pF  S]  ^e  Sf+  gW%g.33W
y':
;;/  NYA'0L0LMMN0 
 V
Is1v&v/T/T
UUVsT   E+ AF' 9F' CF' +	F$4%FF$F' F$$F' '	G 0%GG G Nr   r   r6   r4   r  r  }  s    Vr6   r  c                       e Zd Zd Zy)GetUserCardc                 0   	 	 t        |      }t        j                  j                  |      j                         }|st        ddit        j                        S t        j                  j                  |      }t        |d      j                  }t        d|d	      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j                        cY d }~S d }~ww xY w)
Nr   r   r  r.  rd   Tr  r   r   )r   r   r   r*   r   r   ru   r<   rv   rw   r   rS  r  rp   r   )r   r   r  r   r   rZ  r  s          r4   rq   zGetUserCard.get  s    VN

 C ##**c*288:=
Y 01&:S:STT##**}*E8#H$7<<7
y':
;;  NYA'0L0LMMN 
 V
Is1v&v/T/T
UUVsN   B  AC AC  	C)%CCC CC 	D%%D
DDNr   r   r6   r4   r  r        Vr6   r  c                       e Zd Zd Zy)DeleteUserCardc                    	 	 t        |      }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                   t"        _        t"        j&                  j)                  |j*                  |j,                         |j/                          t        ddi      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j0                        cY d }~S d }~ww xY w)	Nr   r   r  r.  rM  rN  zNo card foundr   )r   r   r   r*   r   r   ru   r<   rv   rw   r   rp   rq   rr   rS  r   r  rW  r#  r  delete_sourcerU  rM  r  r   )r   r   r  r   r   rM  rZ  s          r4   r   zDeleteUserCard.post  sq   VN

 C ##**c*288:=
Y 01&:S:STT\\i(7
Y 56v?Z?Z[[##**g*6<<>8
Y09T9TUU..6>	??   ??
Iy)
**#  NYA'0L0LMMN$ 
 V
Is1v&v/T/T
UUVs[   E AF 9F AF "A)F 	F%F :F;F  FF 	G%F<6G<GNr   r   r6   r4   r  r    s    Vr6   r  c                       e Zd Zd Zy)
PayBookingc                 t   	 	 t        |      }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 |j                  j                  d      }|st        dd	it        j                        S t        j                  j                  ||
      j                         }|st        ddit        j                        S d}	t!        |j"                  |j$                  |j&                  |	      }
|
d   dk(  rt(        j                  j+                  t-               ||t        |j&                        |
d   d   |
d   d   |
d   d   d   |
d   d   d	      }d|_        |j1                          t        ddi      S t        d|
d   it        j                        S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j2                        cY d }~S d }~ww xY w)Nr   r   r  r.  r?   appointment_id is requiredrI  rM  rN  rO  rP  falser   Trp   balance_transactionreceipt_urlpayment_method_detailsro   r   rl  )	rK   rb   bookingrc   txn_idrecipet_urlr`  	charge_idrk  r   )r   r   r   r*   r   r   ru   r<   rv   rw   r   rp   rq   rr   r;   rS  rT  rU  rM  r  rN   ry   rO   is_paidr+   r   )r   r   r  r   r   r?   appointment_objrM  rZ  r[  r\  CustTransactions               r4   r   zPayBooking.post  s   (VN

 C ##**c*288:=
Y 01&:S:STTLL$$%56>
Y <=fFaFabb+33::n:MSSU?
Y 67@[@[\\\\i(7
Y 56v?Z?Z[[##**g*DJJL8
Y ;<VE`E`aa=*8+C+CHDTDTUdUjUjkxy=H%)1188H^H`kx  BQ  Y\  ]l  ]r  ]r  Ys  {H  IO  {P  Qf  {g  tA  BH  tI  JW  tX  hu  v|  h}  ~V  hW  X^  h_  jw  x~  j  @D  jE  W\8  ]O"O Y	*++Y}Y78@[@[\\G  NYA'0L0LMMNH 
 V
Is1v&v/T/T
UUVsn   I AI> 9I> AI> "9I> AI> *B7I> "I> 	I;%I60I;1I> 6I;;I> >	J7%J2,J72J7Nr   r   r6   r4   r  r    s    )Vr6   r  c                       e Zd Zd Zy)PayBookingWalletc                    	 	 t        |      }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                         }|st        dd	it        j                        S t!        |j"                        t!        |j$                        kD  rIt'        d
|j"                         t'        d|j$                         t        ddit        j                        S t(        j                  j+                  t-               ||t        |j"                        dd      }d|_        |j1                          t!        |j$                        t!        |j"                        z
  }	|	|_        |j1                          t        ddi      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j2                        cY d }~S d }~ww xY w)Nr   r   r  r.  r?   r  rI  rd   zNo wallet found for this user.appointmentrV  z,You do not have sufficent balance in wallet.rl  )rK   rb   r  rc   r`  rk  Tr   )r   r   r   r*   r   r   ru   r<   rv   rw   r   rp   rq   rr   r;   r|   r@   r  rc   r   rN   ry   rO   r  r+   r   )
r   r   r  r   r   r?   r  
wallet_objr  
new_wallets
             r4   r   zPayBookingWallet.post  sq   'VN

 C ##**c*288:=
Y 01&:S:STTLL$$%56>
Y <=fFaFabb+33::n:MSSU?
Y 67@[@[\\&&----HNNP:
Y @A&JeJeff	/

 3z'8'8#99	---.	(:$$%Y NOX^XsXstt(0077I_Ialy  CR  Z]  ^m  ^s  ^s  Zt  DL  ^c7  d?!?J%%&_-B-B)CC:!:?? Iy)
**E  NYA'0L0LMMNF 
 V
Is1v&v/T/T
UUVsi   I	 AJ 9J AJ "AJ /A3J #B%J 		J%I=7J8J =JJ 	J>%J93J>9J>Nr   r   r6   r4   r  r    s    (Vr6   r  c                 
   g }i }|dk(  rt         j                  j                  |      }t        j                  j                  |      }	t        j                  j                  |      }
t
        j                  j                  |      }nt         j                  j                  |      }t        j                  j                  |      }	t        j                  j                  |      }
t
        j                  j                  |	      }|D ]  }|j                  }|j                  }|j                  }|dk(  r2t        j                  j                  d
|      j                  |       }n1t        j                  j                  d|      j                  |       }|D ]T  }|j                  }|j                  |vr&t        |      j                  |d||j                  <   C|||j                     d<   V  |	D ]  }|j                  }|j                   }|j                  }|dk(  r2t        j                  j                  d
|      j                  |       }n1t        j                  j                  d|      j                  |       }|D ]T  }|j                  }|j                  |vr&t        |      j                  |d||j                  <   C|||j                     d<   V  |
D ]  }|j"                  }|j$                  }|j                  }|dk(  r2t        j                  j                  d
|      j                  |       }n1t        j                  j                  d|      j                  |       }|D ]T  }|j                  }|j                  |vr&t        |      j                  |d||j                  <   C|||j                     d<   V  |D ]  }|j&                  }|j(                  }|j                  }|dk(  r2t        j                  j                  d
|      j                  |       }n1t        j                  j                  d|      j                  |       }|D ]T  }|j                  }|j                  |vr&t        |      j                  |d||j                  <   C|||j                     d<   V  |j+                         D ]  \  }}d}d}d|v r	d}d}d}d} nd}d}d}d} d|v r||d   |z  z  }||d   |z  z  }d|v r||d   |z  z  }||d   |z  z  }d|v r||d   | z  z  }||d   | z  z  }d|v r||d   |z  z  }||d   |z  z  }||d<   ||d<   |j-                  |        |S ) NMale)male_horoscope)male_chinese_zodiac)male_element_name)male_mbti_name)female_horoscope)female_chinese_zodiac)female_element_name)female_mbti_nameFemale)seer_user__genderhoroscope__horoscopeseer_user_id)r   horoscope_compatibility_scorer  )r  chinese_zodiac__chinese_zodiac)r   "chinese_zodiac_compatibility_scorer  )r  five_element__element_name)r   !five_elements_compatibility_scorer  )r  mbti__mbti_name)r   mbti_compatibility_scorer  r         ?g333333?皙?g333333?g?average_compatibility_scorecompatibility_percentage)CompatibilityHoroscoper<   rv   CompatibilityChineseZodiacCompatibilityFiveElementsCompatibilityMBTIr  r  compatibility_scorerS  rK  rb   r   r/  rp   r  r  r  r  r  r  itemsr  )!r  login_user_genderlogin_user_horoscopelogin_user_chinese_zodiaclogin_user_element_namelogin_user_mbti_namecompatibility_scorescompatibility_datahoroscope_compatibilitychinese_zodiac_compatibilityfive_elements_compatibilitymbti_compatibilitycompatibilityr  r  r   matching_users
user_signsr   r  r  r  r  r  r  r  rp   compatibility_score_totalcompatibility_percentage_totalmbti_weighthoroscope_weightchinese_zodiac_weightelement_weights!                                    r4   get_compatibility_scoresr  $	  so    2::AAQeAf!;!C!C!J!J_x!J!y 9 A A H H[r H s(0077G[7\ 3::AASgAh!;!C!C!J!Jaz!J!{ 9 A A H H]t H u(0077I]7^ .] //."33%99& &..55fv5w  NQ  R>&..55dr5s{{  JM{  N> #j


4
gg''t$))&9#tww
 DWtww ?@ # .. 3]%99'==%99& &..55  qF5  G  O  O  ]`  O  a>&..55  oB5  C  K  K  Y\  K  ]> #j


4
gg'' &+++>#tww
 I\tww DE # 3, 2]#55%99%99& &..55l5  A  I  I  WZ  I  [>&..55j{5|  E  E  SV  E  W> #j


4
gg''t$))*=#tww
 H[tww CD # 2. )] //."33%99& &..55aq5rzz  ILz  M>&..55_m5nvv  EHv  I> #j


4
gg''t$))!4#tww
 ?Rtww :; # )2 )..0]Wd#$ 4';>;>$,%D EHX XX!T*I%JM]%]]!)T1%I JMb bb!T*N%ORg%gg!(D0%H IN ZZ!T*M%NQ_%__!4'%? @; NN!T*D%E%SS! )B$$%%C$!"d#G 1L 	r6   c                       e Zd Zd Zy)	MyMatchesc                    	 	 t        |      }t        j                  j                  |      j                         }|st        ddit        j                        S t        j                  j                  |      j                         }|st        ddit        j                        S |j                  j                  }|j                  j                  }|j                  j                  }|j                   r|j                   j"                  }	nd }	|j$                  j&                  }
t)        ||
||||	      }|D cg c]  }|d   dk\  s| }}	 t        d	|d
      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY wc c}w # t        $ r0}t        dt        |      it        j*                        cY d }~S d }~ww xY w)Nr   r   r  r.  r  z#Sign details not found for the userr  F   r   r   )r   r   r   r*   r   r   ru   r<   rv   rw   r   rS  rG  rH  rJ  rI  rq  rp  rb   r3  r  r   )r   r   r  r   r   login_user_signsr  r  r  r  r  r  r  filtered_compatibility_datas                 r4   rq   zMyMatches.get	  s   #VN

 C ##**c*288:=
Y 01&:S:STT )0077S7IOOQ
Y EFvOhOhii*44>>/>>MM-::GG+00::'1188 15FG[\u  wN  Oc  dEW  "LEWM[h  jD  \E  IK  \K-EW  "L&
 y1LM
NN;  NYA'0L0LMMN, "L 
 V
Is1v&v/T/T
UUVsg   E AF AF (BF 9FFF 	F%%F
FF FF 	G&%GGGNr   r   r6   r4   r  r  	  s    $Vr6   r  c                       e Zd Zd Zy)SeerUserProfileDetailc                    	 	 t        |      }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        |d|j                  i      j                   }t        d	|d
      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j"                        cY d }~S d }~ww xY w)Nr   r   r  r.  r   zseer user id is requiredr  r  r   r   )r   r   r   r*   r   r   ru   r<   rv   rw   r   r  rq   rr   SeerUserCompatibilitySerializerr   rp   r   )	r   r   r  r   rb   rp   matching_user_usermatching_user_objr   s	            r4   rq   zSeerUserProfileDetail.get	  s[   TN

 C &&#&.4469
Y 01&:S:STT


4
Y9:&B]B]^^''..2D.EKKM
Y 01&:S:STT*+<nV_VbVbEcdii7
iw7
88  NYA'0L0LMMN 
 T
Ic!f%V-R-R
SSTsZ   D AE ;E AE $0E 	E%E	EE 	EE 	F
%F?F
F
Nr   r   r6   r4   r  r  	  rD  r6   r  c                       e Zd Zd Zy)RatingReviewFrotunetellerc                 T   	 	 t        |      }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 |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        j                  j                  |      j!                         }	t        j                  j                  |      D 
cg c]  }
t#        |
j$                         }}
t'        |      }t#        |      t#        |	      z  }||_        |j)                          t        ddi      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY wc c}
w # t        $ r0}t        dt        |      it        j*                        cY d }~S d }~ww xY w)Nr   r   r  r.  r  zfortune_teller_id is requiredzNo fortune teller foundrating_datazrating_data is requiredr  zreview_data is required)rb   r  ratingreviewr  r   )r   r   r   r*   r   r   ru   r<   rv   rw   r   rp   rq   r  r  ry   r   floatr'  sumr+   r   )r   r   r  r   r   r  r  r&  r  total_countr  
all_ratingfinal_ratingaverages                 r4   r   zRatingReviewFrotuneteller.postT
  sf   VN

 C ##**c*288:=
Y 01&:S:STT||''(;<
Y ?@IbIbcc&&--2C-DJJL;
Y 9:6C\C\]]!!-0;
Y 9:6C\C\]]!!-0;
Y 9:6C\C\]]%%,,}T_gr  {F,  G ,33::+:V\\^;D^DfDfDmDm  ~IDm  EJ  K  EJ.~,,-  EJ:  Kj/<u[117;
Iy)
**5  NYA'0L0LMMN* K 
 V
Is1v&v/T/T
UUVst   H- AI. 9I. AI. "9I. 9I. A3I. 	I)%AI. -	I&6%I!I&I. !I&&I. .	J'7%J"J'"J'Nr   r   r6   r4   r$  r$  S
  s     Vr6   r$  c                       e Zd Zd Zy)referAFriendc                    	 	 t        |      }t        j                  j                  |      j                         }|st        ddit        j                        S |j                  }t        d|d      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY 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*   r   r   ru   r<   rv   rw   r   r`   r   )r   r   r  r   r   my_refer_codes         r4   rq   zreferAFriend.gety
  s    VN

 C ##**c*288:=
Y 01&:S:STT --=
yF
GG  NYA'0L0LMMN 
 V
Is1v&v/T/T
UUVsM   A5 AB1 B1 5	B.>%B)#B.$B1 )B..B1 1	C*:%C%C*%C*Nr   r   r6   r4   r0  r0  x
  s    Vr6   r0  c                       e Zd Zd Zy)SeerUserInMyContactc                    	 	 t        |      }|j                  }|j                  dg       }t        dt        |             t        j                  j                  t        |            }t        |d      j                  }t        d|d      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j                        cY d }~S d }~ww xY w)	Nr   r   contact_numbers)phone_number__inTr  r   r   )r   r   r   r*   r   r   rp   rq   r   r!  ru   r<   rv   r/  r   )r   r   r  r   rp   r6  
seer_users	user_datas           r4   r   zSeerUserInMyContact.post
  s    VN

 C ,,4XX/4?	401  ''o9N'O:!*48==9
i	:
;;  NYA'0L0LMMN 
 V
Is1v&v/T/T
UUVsG   B B C 	C%C=C>C CC 	D%C?9D?DNr   r   r6   r4   r4  r4  
  r  r6   r4  c                       e Zd Zd Zy)	AddFriendc                 
   	 	 t        |      }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                  |      }t        j                  j                  ||      j                         }|s`t        j                  j!                  ||d	
      }|j"                  r|j$                  }	t        t&        j(                        }
|j*                  dk(  r@dd|j,                  dz   |j.                  z   dz   d}t1        |
      j3                  |	|      }|j*                  dk(  rcd}|j,                  dz   |j.                  z   dz   }dd|j,                  dz   |j.                  z   dz   d}t1        |
      j3                  |	|||      }t4        j                  j!                  |j,                  dz   |j.                  z   dz   d|       t        ddi      S t        ddi      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        j                  $ r  t        ddit        j                        cY S w xY w# t        $ r0}t        dt        |      it        j6                        cY d }~S d }~ww xY w)Nr   r   r  r.  	friend_idzfriend_id is requiredzUser not found)	from_userto_userF)r>  r?  acceptedr  friend_request_receivedNEW FRIEND REQUEST RECEIVEDrl    sent you a friend request.r!  r"  r$  r'  )rB  r(  rf   r   zRequest already sent)r   r   r   r*   r   r   ru   r<   rv   rw   r   rp   rq   rr   DoesNotExistFriendRequestry   r  r   r   r/  r   rS   rT   r   r0  r~   r   )r   r   r  r   r   rp   r=  friendfriendship_requestr%  r8  r&  r9  r)  r*  s                  r4   r   zAddFriend.post
  s   5UN

 C ##**c*288:=
Y 01&:S:STT
,,4xx$9
Y67v?Z?Z[[U!!Y!/F &--44}V\4]cce
&..55W]hm5n !!''_h223Zi' 93%004]5L5LLMjjl
 z2GGXg  xDG  Efe#4m#..s2=3J3JJKhhl 93&11#5m6M6MMNkkl z2GGXg  xEl H <f !!((1I1I#1MmNeNe1e  gD  2D  Wp  {A(  BY	*++Y 6788a  NYA'0L0LMMN 

 UY 01&:S:STTUL 
 UYs1v&f.S.STTUsx   I AK	 ;K	  J 8FK	 
K	 	J %JJK	 JK	 0KK	 KK	 		L%K=7L=LNr   r   r6   r4   r;  r;  
  s    6Ur6   r;  c                       e Zd Zd Zy)AcceptRejectRequestc                    	 	 t        |      }t        j                  j                  |      j                         }|st        ddit        j                        S |j                  }|j                  d      }|j                  d      }|st        ddit        j                        S |st        ddit        j                        S 	 t        j                  j                  |d	
      }|dk(  rd|_        |j#                          |j$                  j&                  r|j$                  j(                  }	t        t*        j,                        }
|j$                  j.                  dk(  r@dd|j0                  dz   |j2                  z   dz   d}t5        |
      j7                  |	|      }|j$                  j.                  dk(  rcd}|j0                  dz   |j2                  z   dz   }dd|j0                  dz   |j2                  z   dz   d}t5        |
      j7                  |	|||      }t8        j                  j;                  |j0                  dz   |j2                  z   dz   d|j$                         t        ddi      S |dk(  r|j=                          t        ddi      S t        ddit        j                        S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        j                  $ r  t        ddit        j                        cY S w xY w# t        $ r0}t        dt        |      it        j>                        cY d }~S d }~ww xY w)Nr   r   r  r.  
request_idr   request_id is requiredzstatus is requiredFr   r@  0Friendship request not found or already acceptedr@  Tr  friend_request_acceptedREQUEST ACCEPTEDrl   z accepted your friend request.r!  r"  r$  r'  )rP  rC  r(  rf   zFriend request acceptedDeclinedzFriend request rejectedz&Status type must be Accepted/Declined ) r   r   r   r*   r   r   ru   r<   rv   rw   r   rp   rq   rr   rE  rD  r@  r+   r>  r  r   r   r/  r   rS   rT   r   r0  r~   ry   r  r   )r   r   r  r   r   rp   rK  status_typerG  r%  r8  r&  r9  r)  r*  s                  r4   r   zAcceptRejectRequest.post
  s]   :TN

 C ##**c*288:=
Y 01&:S:STT
,,4&:(#;
Y78@[@[\\
Y34F<W<WXXw&..22j52Q Z"& ##77)33==_h223Z$$00I= 9(%004]5L5LLMmml
 z2GGXg  xDG  Ef$$00E9)m#..s2=3J3JJKhhl 9(&11#5m6M6MMNnnl z2GGXg  xEl H <f !!((1I1I#1MmNeNe1e  gG  2G  Zs  ~P  ~Z  ~Z(  [Y 9:;;z!Y 9:;;YGHPVPkPkllk  NYA'0L0LMMN 
$
$ wY RS\b\u\uvvwP 
 T
Ic!f%V-R-R
SSTs   J6 AL( AL( (L( !K2 )FL( 7!L( L( 6	K/?%K*$K/%L( *K//L( 20L%"L( $L%%L( (	M!1%MM!M!Nr   r   r6   r4   rI  rI  
      ;Tr6   rI  c                       e Zd Zd Zy)SentRequestsListc                 2   	 	 t        |      }t        j                  j                  |      j                         }|st        ddit        j                        S t        j                  j                  |d      }t        |d      j                  }t        d	|d
      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j                        cY d }~S d }~ww xY w)Nr   r   r  r.  F)r>  r@  Tr  r   r   )r   r   r   r*   r   r   ru   r<   rv   rw   r   rE  SentFriendListSerializerrp   r   )r   r   r  r   r   rG  r  s          r4   rq   zSentRequestsList.get  s    TN

 C ##**c*288:=
Y 01&:S:STT%--44}V[4\&'9tDII8
y9
::  NYA'0L0LMMN 
 T
Ic!f%V-R-R
SSTN   B! AC AC !	C*%CCC CC 	D&%DDDNr   r   r6   r4   rU  rU        Tr6   rU  c                       e Zd Zd Zy)ReceivedRequestsListc                 2   	 	 t        |      }t        j                  j                  |      j                         }|st        ddit        j                        S t        j                  j                  |d      }t        |d      j                  }t        d	|d
      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j                        cY d }~S d }~ww xY w)Nr   r   r  r.  F)r?  r@  Tr  r   r   )r   r   r   r*   r   r   ru   r<   rv   rw   r   rE  ReceivedFriendListSerializerrp   r   )r   r   r  r   r   received_friendlistr  s          r4   rq   zReceivedRequestsList.get&  s    TN

 C ##**c*288:=
Y 01&:S:STT&..55mUZ5[*+>DINN8
y9
::  NYA'0L0LMMN 
 T
Ic!f%V-R-R
SSTrX  Nr   r   r6   r4   r[  r[  %  rY  r6   r[  c                       e Zd Zd Zy)
FriendListc                    	 t        |      }t        j                  j                  |      j                         }|st        ddit        j                        S t        j                  j                  t        j                  |      t        j                  |      z  t        j                  d      z        j                  d	d
      }g }|D ]:  }|j                  |k(  r|j                   n|j                  }|j#                  |       < t%        |d      j&                  }	t        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?  T)r@  r>  r?  r  r   r   )r   r   r   r*   r   r   ru   r<   rv   rw   r   rE  modelsr   select_relatedr>  r?  r  SeerUserFriendSerializerrp   )
r   r   r  r   r   friendsfriend_listrF  friend_userr  s
             r4   rq   zFriendList.get8  s7   N

 C ##**c*288:=
Y 01&:S:STT""))XXX&-)HHFHH^bHLcc^K+  ;v$*$4$4$E&..6K[K[K{#  '{>CC8
y9
::  NYA'0L0LMMNs   D1 1	E*:%E%E*%E*Nr   r   r6   r4   r`  r`  7  s    ;r6   r`  c                       e Zd Zd Zy)SearchFriendc                 B   	 	 t        |      }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                  t        |      t        |      z  t        |	      z  d
      j                  |j                         }t#        |d
d|i      j$                  }t        d|j                   |d      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        j&                        cY d }~S d }~ww xY w)Nr   r   r  r.  searchzsearch is required)phone_number__icontains)first_name__icontains)email__icontainsTr  
login_userr  r   )r   r   rp   )r   r   r   r*   r   r   ru   r<   rv   rw   r   r  rq   rr   r   rK  r   rd  rp   r   )	r   r   r  r   r   rp   rk  search_friendr9  s	            r4   rq   zSearchFriend.getR  s   TN

 C ##**c*288:=
Y 01&:S:STT


4HHX6
Y34F<W<WXX##**1V+LQekMl+lmn  AG  nH  ,H  [_*  `  h  h  ly  l|  l|  h  }='4WdHefkk9 y9I9IQZ[
\\!  NYA'0L0LMMN" 
 T
Ic!f%V-R-R
SSTsT   D) AE% ;E% BE% )	E"2%EE"E% E""E% %	F.%FFFNr   r   r6   r4   ri  ri  Q  s    Tr6   ri  c                       e Zd Zd Zy)CancelSentRequestc                    	 	 t        |      }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                  |d      }|j!                          t        dd
i      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        j                  $ r  t        dd	it        j                        cY S w xY w# t        $ r0}t        dt        |      it        j"                        cY d }~S d }~ww xY w)Nr   r   r  r.  rK  rL  FrM  rN  zFriend request cancel)r   r   r   r*   r   r   ru   r<   rv   rw   r   rp   rq   rr   rE  rD  r  r   )r   r   r  r   r   rp   rK  rG  s           r4   r   zCancelSentRequest.postl  s]   TN

 C ##**c*288:=
Y 01&:S:STT
,,4&:
Y78@[@[\\w&..22j52Q 
I67
88  NYA'0L0LMMN 
$
$ wY RS\b\u\uvvw 
 T
Ic!f%V-R-R
SSTsq   C AE ;E !D 9E 	D%D
DE 
DE 0EE EE 	F%E<6F<FNr   r   r6   r4   rr  rr  k  s    Tr6   rr  c                       e Zd Zd Zy)AppointmentReminderMessagec           
         	 t        j                         }|j                  d      }t        j                         }|j                  d      }t
        j                  j                  d      }|D ]I  }|j                  |k(  s|j                  }|j                  d      d   }	t        j                  |	d      }
t        j                  |d      }|
|z
  }|t        d      k(  sut        j                  j                  d	|j                   j"                   d
|j                   d|j$                  j"                   dt&        |j                   j(                        }t        j                  j                  d	|j$                  j"                   d|j                   dt&        |j$                  j(                        }L t+        ddi      S # t,        $ r0}t+        dt/        |      it0        j2                        cY d }~S d }~ww xY w)Nr  %d %b %Yr@  appointment_statusrF  r   r	   hourszHello z!,
 Your today appointment timing z with z= fortune teller, Please join on time.
 Thank you 
 Seer Team.)bodyfrom_r   z,
 You have an appointment at z=. Please be prepared for the session.
 Thank you 
 Seer Team.r   r   r   )r   r  r-  r   todayr;   r<   rv   r  r  r   r,  r   clientr   ry   rb   rS   r  from_mobile_numberr   r   r   r*   r   r   )r   r   r  r  r~  
today_daterC  appointappoint_timenew_timeappointment_datetimecurrent_datetimetime_differencer   r   s                  r4   rq   zAppointmentReminderMessage.get  s   T	3,,z*<::<5z*:'//66*6U;w:-,,\""3'*X$--h
C )),
C+.>>_91--&&W&&1122TU\UmUmTnntu|  vL  vL  vW  vW  uX  XW  X



(
( ' g &&W++6677VW^WoWoVp  qp  q

 
 
-
- ' g ( Yy)
**	 T
Ic!f%V-R-R
SSTs,   A?G A G #C$G 	H%G<6H<HNr   r   r6   r4   ru  ru    s    Tr6   ru  c                       e Zd Zd Zy)*AppointmentReminderMessagePushNotificationc                    	 t        j                         }|j                  d      }t        j                         }|j                  d      }t
        j                  j                  d      }|D ]  }|j                  |k(  s|j                  }|j                  d      d   }	t        j                  |	d      }
t        j                  |d      }|
|z
  }|t        d      k(  su	 |j                  j                  }t        t         j"                        }|j                  j$                  d	k(  rgd
dd|j                  j&                  z   dz   |j                  z   dz   |j(                  j&                  z   dz   d}t+        |      j-                  ||      }|j                  j$                  dk(  rd}|j                  j&                  dz   |j                  j.                  z   dz   }d
dd|j                  j&                  z   dz   |j                  z   dz   |j(                  j&                  z   dz   d}t+        |      j-                  ||||      }	 	 |j(                  j                  }t        t         j"                        }|j(                  j$                  d	k(  rMd
dd|j(                  j&                  z   dz   |j                  z   dz   d}t+        |      j-                  ||      }|j(                  j$                  dk(  rd}|j(                  j&                  dz   |j(                  j.                  z   dz   }d
dd|j(                  j&                  z   dz   |j                  z   dz   d}t+        |      j-                  ||||      } t1        ddi      S # t2        $ r0}t1        dt        |      it4        j6                        cY d }~S d }~ww xY w)Nr  rw  r@  rx  rF  r   r	   rz  r  appointment_reminderAPPOINTMENT REMINDERHelloz ,
 Your today appointment timingwithz<fortune teller, Please join on time.
 Thank you 
 Seer Team.r!  r"  r$  r'  r  rl    its your appointment reminder.r(  z,
 You have an appointment atz;Please be prepared for the session.
 Thank you 
 Seer Team.r   r   r   )r   r  r-  r   r~  r;   r<   rv   r  r  r   r,  r   rb   r   r*   r   r/  r   rS   r  r   r0  rT   r   r   r   r   )r   r   r  r  r~  r  rC  r  r  r  r  r  r  seer_user_registration_idr8  r&  r9  r)  r*  fortune_teller_registration_idr   s                        r4   rq   z.AppointmentReminderMessagePushNotification.get  sS   LT	3,,z*<::<5z*:'//66*6U;w:-,,\""3'*X$--h
C )),
C+.>>_91-- Q")"3"3"="=x334j				&	&)	3!7- 7#4#4#?#??Beeho  iA  iA  A  DJ  J  MT  Mc  Mc  Mn  Mn  n  rr  r|
  
3HHYr  COH  Pv				&	&%	/.}((33C78I8I8S8SSTuu|!7-!G$5$5$@$@@Cffip  jB  jB  B  EK  K  NU  Nd  Nd  No  No  o  ss  s|  
3HHYr  CP | I =v XU'.'='='G'G$x334j				+	+y	8!7- 7#9#9#D#DDGggjq  kC  kC  C  FE  E|
  
3HHYw  HTH  Uv				+	+u	4.}--88<W=S=S=]=]]^|!7-!G$:$:$E$EEHhhkr  lD  lD  D  GF  F|  
3HHYw  HU | I =v ]C F Yy)
**	 T
Ic!f%V-R-R
SSTs,   A?N A N #J*N 	O%O<OONr   r   r6   r4   r  r    s	    MTr6   r  c                       e Zd Zd Zy)dummyNotificationc                     	 	 t        |      }t        j                  j                  |      j                         }|st        ddit        j                        S 	 |j                  }t        t        j                        }|j                  dk(  r#dddd	}t        |
      j!                  ||      }|j                  dk(  rFd}	|j"                  dz   |j$                  z   dz   }
dddd	}t        |
      j!                  ||	|
|      }	 	 	 t        ddi      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY 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  zHello seer_user_obj.first_name Your today appointment timing 7:79 with Rahul fortune teller, Please join on time.
 Thank you 
 Seer Team.r!  r"  r$  r'  r  rl   r  r(  r   )r   r   r   r*   r   r   ru   r<   rv   rw   r   r   r   r/  r   r   r0  rS   rT   r   )r   r   r  r   r   r  r8  r&  r9  r)  r*  s              r4   r   zdummyNotification.post  s   :TN

 C ##**c*288:=
Y 01&:S:STTM,66H001:9,4* dL
 Z0EEVo  @LE  MF5(+M!,,S01H1HHIjjL4* eL Z0EEVo  @ML F :F UR, Z
Iy)
**k  NYA'0L0LMMNl 
 T
Ic!f%V-R-R
SSTsN   D AE B<E 	E!%EEE EE 	F%FFFNr   r   r6   r4   r  r    rS  r6   r  c                       e Zd Zd Zy)CancelAppointmentc                    	 	 t        |      }t        j                  j                  |      j                         }|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                  |      j                         }|st        dd	it        j                        S |j                  }	|j                   }
t#        t        j$                  |	j'                  d
            \  }}t)        j*                  |
dz   |z   d      }t)        j,                         }||z
  j/                         }|dz  }d}|dk\  rd}d}n1|dk\  rd}d}n'|dk\  rd}d}nt        ddit        j                        S ||_        d|_        |j4                  }||z  }|j6                  dk(  rtt8        j                  j                  |      j                         }|j:                  s"t<        j                  j?                  |||       d|_        |jA                          n9d|_        t<        j                  j?                  |||       |jA                          t        ddi      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# t        $ r0}t        dt        |      it        jB                        cY d }~S d }~ww xY w)Nr   r   r  r.  r   zappointment id is requiredcancellation_reasonzCancellation reason is requiredzAppointment not foundrF  rl   z%d %B %Y %I:%M %pi  r      g?
      r  2   r	   r  Z   zSSorry, you cannot cancel this appointment. It is too close to the appointment time.r   r?  )r  )r  refund_amountcancellation_chargesCanceledr   )"r   r   r   r*   r   r   ru   r<   rv   rw   r   rp   rq   rr   r;   r  r  rL  r  r   r   r,  r  total_secondsr  cancelled_byr  ry  rN   r  AdminRefundRequestry   r+   r   )r   r   r  r   r   rp   r?   r  r  r  r  r  r  appointment_datetime_startr  r  difference_hoursr  refund_percentagetotal_amountr  transaction_objs                         r4   r   zCancelAppointment.post<  s+   :TN

 C ##**c*288:=
Y 01&:S:STT
,,4HHTN>
Y;<FD_D_`` ))*?@
Y AB6KfKfgg+33::n:MSSU?
Y 78AZAZ[[ &66%66!#))-=-C-CC-HI< ( 1 12BS2H<2WYl m,,.<0<?NNP?%,"AAY uv  E  Z  Z  [  [)<?&"(?!''<"33=((I5)11888QWWYO$$&&?Q^  uI&  J)3O&)3O&%%/P]  tH%  I
Ii(
))k  NYA'0L0LMMNl 
 T
Ic!f%V-R-R
SSTsh   K AL ;L 9L AL CL 'C'L 	L%L=L>L LL 	M%L?9M?MNr   r   r6   r4   r  r  ;  rS  r6   r  c                       e Zd Zd Zy)DeleteUserAccountViewc                 `   	 t        |      }t        j                  j                  |      j                         }|st        ddit        j                        S |}|t        ddit        j                        S 	 t        j                  j                  |      }d|_        |j                          t        ddid      S # t        $ r0}t        dt        |      it        j
                        cY d }~S d }~ww xY w# j                  $ r  t        ddit        j                        cY S w xY w)	Nr   r   r  r.  zuser_id is requiredTzUser deleted successfully   )r   r   r   r*   r   r   ru   r<   rv   rw   r   rq   rD  r   r+   )r   r   r  r   r   r  r   s          r4   destroyzDeleteUserAccountView.destroy|  s   M	w	3 ""))S)1779-	
I/09R9R
SS'_
I45f>W>W
XXT




'

*4 $))+	99:3	GG 
 M
Is1v&v/K/K
LLM 
		 T
I/09R9R
SSTs/   C < C> 	C;%C60C;6C;>,D-,D-N)r   r   r   r  r   r6   r4   r  r  {  s    Hr6   r  )rU   r   django.shortcutsr   rest_framework.viewsr   rest_framework.responser   rest_frameworkr   rb  	functionsr   r   r   r   django.confr   django.contrib.authr   django.contrib.auth.modelsr   rest_framework_simplejwt.tokensr   passlib.hashr   rs   django.template.loaderr   django.corer   django.core.mailr   mathr  r   django.contribr   r   r   admin_panel.modelsr#  rest_framework.authenticationr   jwtauthenticationr   django.core.files.storager   r%   admin_panel.common_functionsserializersadmin_panel.serializersr   r   fortune_teller.modelsfortune_teller.serializersr   r  django.db.modelsr   rW  pyfcmr   twilio.restr    r!   TWILIO_ACCOUNT_SIDaccount_sidTWILIO_AUTH_TOKEN
auth_tokenr  TWILIO_MOBILE_NUMBERr  r5   rE   rL   rO   rQ   r   r   r   r   r   r   r   r   r	  r  r,  r1  ra  rh  rj  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r;  rF  rK  r^  ri  django.utilsr?  ro  r  r  r  r  r  r  r  r  r$  r0  r4  r;  rI  rU  r[  r`  ri  rr  ru  r  r  r  DestroyAPIViewr  r   r6   r4   <module>r     sf    # ( , !    . .   , + 8 8 3  3 ! ! #     B 
 ) 7 	 *  D # > 
   !  # ((''
	Z	(22 	$   >Tw >TBAV' AVH"T' "TJ	: 	:Tg TB*T *TZUW U@9 9BT T"V' V2T7 T@T T iVg iVX_V' _VB%
,Vg ,VZV7 V<V V| V'  VDVG V$T TT' TT7 TT7 TN*T *TXT' T@TG T8V V8T T:T T<Tg T(T7 T"Tg T"iTW iTXTW T.V V&6Vw 6VrVg V.V7 Vl "hV hVXV' VBV' V VW V6*V *VZ)Vw )V\[|%V %VNTG T0Od!V !VJV7 VV' V&7U 7Ut<T' <T~Tw T$T7 T$; ;4T7 T4T T2 ]T TDNT NTb d<T <T~<T <T@HH33 Hr6   