
    
Ug#                       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
T 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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'Z'd dl(m)Z) d dl*Z*d dl+Z+d dl,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3m4Z4m5Z5 d dl6m7Z7m8Z8 d dl9T ddl:T ddl;T d dl<m=Z= d dl>m?Z? d d	lmZ d dl@mAZA d dlmZ d dlBZBd dlCmDZDmEZEmFZF d dl>m?Z? d dlGmHZH d d lImJZJ ejK        ZLejM        ZNejO        ZPejQ        ZRejS        ZTejU        ZV e?eLeN          ZWdd!ZX G d" d#e          ZY G d$ d%e          ZZ G d& d'e          Z[ G d( d)e          Z\ G d* d+e          Z] G d, d-e          Z^ G d. d/e          Z_ G d0 d1e          Z` G d2 d3e          Za G d4 d5e          Zb G d6 d7e          Zc G d8 d9e          Zd G d: d;e          Ze G d< d=e          Zf G d> d?e          Zg G d@ dAe          Zh G dB dCe          Zi G dD dEe          Zj G dF dGe          Zk G dH dIe          Zl G dJ dKe          Zm G dL dMe          Zn G dN dOe          Zo G dP dQe          Zp G dR dSe          Zq G dT dUe          Zr G dV dWe          Zs G dX dYe          Zt G dZ d[e          Zu G d\ d]e          Zv G d^ d_e          Zw G d` dae          Zx G db dce          Zy G dd dee          Zz G df dge          Z{ G dh die          Z| G dj dke          Z} G dl dme          Z~ G dn doe          Z G dp dqe          Z G dr dse          Z G dt due          Z G dv dwe          Z G dx dye          Z G dz d{e          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 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 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          ZdS )    )message)render)APIView)Responsestatus   )*)datetime	timedeltadate)settings)authenticate)User)RefreshToken)django_pbkdf2_sha256)render_to_string)authenticated)mail)EmailMultiAlternativesN)messages)FileSystemStorage)Q)FCMNotification)TemplateView)ContentManagementFaqAdminNotifications)ContentSerializerFAQSerializer)	timesince)Client)timezone)r   )	SyncGrant	ChatGrant
VideoGrant)AccessToken)	messagingc                     t          j        t          j        ||          | ddi          }t          j        |          }|S )N)titlebody	AASASASASSSAD)notificationtokendata)r(   MessageNotificationsend)registration_idr*   r+   r0   r   responses         3/var/www/html/Alfredo_demo/alfredo/trainer/views.pysend_push_notificationr7   8   sW    %	  
 		V   N7##    c                       e Zd Zd ZdS )Registerc           	         	 |j         }|                    d          }|                    d          }|                    d          }|                    d          }|                    d          }|                    d          }|                    d          }	|r|r|st          dd	it          j        
          S t          j        |          }
t          j        	                    |          
                                }|rt          ddit          j        
          S t          j        ddd          }t          j                            |||
||||          }||_        |                                 d}t#          dd|i          }|}t$          j        }|}	 t)          j        ||||g|           n4# t,          $ r'}t          ddit          j        
          cY d }~S d }~ww xY wt          ddi          S # t,          $ r4}t          dt1          |          it          j        
          cY d }~S d }~ww xY w)N	full_nameemailpasswordaddresslatitude	longitude	fcm_tokenr   $All required fields must be providedr   r=   The email is already registered  '     )r<   r=   r>   otpr?   r@   rA   Verify Accountemail_verification.htmlrI   html_messageYour account has been created, but we encountered an issue sending the verification email. Please contact support for assistance.HYou have been successfully registered with us. Please verify your email.)r0   getr   r   HTTP_400_BAD_REQUESThandlerhashTrainerobjectsfilterfirstHTTP_409_CONFLICTrandom	randrangecreaterI   saver   r   EMAIL_HOST_USERr   	send_mail	ExceptionHTTP_500_INTERNAL_SERVER_ERRORstr)selfrequestr0   r<   r=   r>   r?   r@   rA   rB   new_passwordtrainer_objthe_otpsubjectrM   plain_message
from_emailtoemail_errores                       r6   postzRegister.postF   s   8V
,4xx$$988G5hhz""888I7HHZ  8xx$$9xx$$9  my m mY FGPVPkllll ,x((< ''e'44::<<; UY AB6Kcdddd T4++G/((	 )  K KOG#$=w?OPPL M)J	BU	^G]J<XXXXX U U Ui  "e  f  ou  oT  U  U  U  U  U  U  U  U  UU Iij
k
kk	 V V V
Is1vv&v/T
U
U
UUUUUUUVs\   B<H  ?A$H  $A;H   F; :H  ;
G,G'!G,"H  'G,,H   
H>
)H93H>9H>N__name__
__module____qualname__rm    r8   r6   r:   r:   E   s(        9V 9V 9V 9V 9Vr8   r:   c                       e Zd Zd ZdS )TrainerResendEmailOtpc                 2   	 |j         }|                    d          }|                                }|st          ddit          j                  S t          j                            |          	                                }|st          ddit          j
                  S t          j        ddd	          }||_        |                                 d
}t          dd|i          }|}t           j        }	|}
	 t%          j        |||	|
g|           n4# t(          $ r'}t          ddit          j                  cY d }~S d }~ww xY wt          ddi          S # t(          $ r4}t          dt-          |          it          j                  cY d }~S d }~ww xY w)Nr=   r   rC   r   rD   zEmail not foundrF   rG   rH   rJ   rK   rI   rL   rN   rO   )r0   rP   lowerr   r   rQ   rT   rU   rV   lastrX   rY   rZ   rI   r\   r   r   r]   r   r^   r_   r`   ra   )rb   rc   r0   r=   trainer_user_objrf   rg   rM   rh   ri   rj   rk   rl   s                r6   rm   zTrainerResendEmailOtp.post   s   (V
,488G5	5  mY FGPVPkllll o,,5,99>>@@
 UY 126;STTTTT4++G"
 G#$=w?OPPL M)J	BU	^G]J<XXXXX U U Ui  "e  f  ou  oT  U  U  U  U  U  U  U  U  UU Iij
k
kk	 V V V
Is1vv&v/T
U
U
UUUUUUUVs\   AE AE "AE 8D E 
ED?9E:E ?EE 
F")FFFNrn   rr   r8   r6   rt   rt      s(        )V )V )V )V )Vr8   rt   c                       e Zd Zd ZdS )SocialLoginc                 N   	 |j         }|                    d          }|                    d          }|                    d          }|                    d          }|                    d          }t          d           t          |           |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                            |d          	                                }|s$t          j        
                    |||||          }t          j        |          }	|j        |j        |j        |j        t#          |	          t#          |	j                  d}
t          d|
d          S # t&          $ r4}t          dt#          |          it          j        	          cY d }~S d }~ww xY w)Nprovider_idr=   r<   device_typerB   z	in socialr   zprovider_id is required.r   full_name is requiredemail is requiredzdevice_type is requiredzfcm_token is requiredT)r|   end_date__isnull)r<   r|   r=   r}   rB   idr<   r=   is_profile_completedrefreshaccessSuccessr   r0   )r0   rP   printr   r   rQ   rT   rU   rV   rW   r[   r   for_userr   r<   r=   r   ra   access_tokenr_   r`   )rb   rc   r0   r|   r=   r<   r}   rB   re   refresh_tokenallDatarl   s               r6   rm   zSocialLogin.post   sO   +V
,4-((;88G5xx$$9-((;xx$$9
 aY :;FD_````
 ^Y 78A\]]]]
 ZY 34V=XYYYY  `Y 9:6C^____
 ^Y 78A\]]]] ''KQU'VV\\^^;
 X/((9U{Y ) X XK  (55=&'<M""=-..	 	7 y'::
;
;;	 V V V
Is1vv&v/T
U
U
UUUUUUUVs=   B,G& /G& G& -G& G& +B:G& &
H$0)HH$H$Nrn   rr   r8   r6   rz   rz      s(        ,V ,V ,V ,V ,Vr8   rz   c                       e Zd Zd ZdS )OtpVerificationc                    	 |j         }|                    d          }|                    d          }|                    d          }|                    d          }|st          ddit          j                  S |st          ddit          j                  S 	 t
          j                            ||	          }n5# t          $ r(}t          d
i dt          j                  cY d }~S d }~ww xY wd|_        ||_	        ||_
        |                                 t          j        |          }	|j        |j        |j        |j        t%          |	          t%          |	j                  d}
t(          j                            d|j        z   dz   d           t          d|
d          S # t          $ r4}t          dt%          |          it          j                  cY d }~S d }~ww xY w)Nr=   rI   rB   r}   r   r   r   otp is requiredr=   rI   Invalid otpr   Tr   zA new trainer z* has been registered successfully with us.trainer_registeredr   typer   )r0   rP   r   r   rQ   rT   rU   r_   email_verifiedrB   r}   r\   r   r   r   r<   r=   r   ra   r   r   r[   r`   )rb   rc   r0   r=   rI   rB   r}   re   rl   r   r   s              r6   rm   zOtpVerification.post   s.   T488G5	%3xx$$9-((;
 XY236;VWWWW
 VY019TUUUU\/%%Ec%::KK
 \ \ \}B77v?Z[[[[[[[[[\ $;$;(;(55=%&;=!!-,-- 7 $$/?AV/V  YE  0E  Ma$  b  b  b
iw77
8
88	 T T T
Ic!ff%V-R
S
S
SSSSSSSTsU   A9F* <F* !B> =F* >
C0C+%C0&F* +C00B9F* *
G(4)G#G(#G(Nrn   rr   r8   r6   r   r      s(        T T T T Tr8   r   c                       e Zd Zd ZdS )RestoreAccountc                 h   	 |j         }|                    d          }|                                }|st          ddit          j                  S t          j                            |d          	                                }|rt          ddit          j
                  S t          j        dd	d
          }t          j                            |                              |          }d}t          dd|i          }|}	t          j        }
|}	 t#          j        ||	|
|g|           n4# t&          $ r'}t          ddit          j                  cY d }~S d }~ww xY wt          d|d          S # t&          $ r4}t          dt+          |          it          j                  cY d }~S d }~ww xY w)Nr=   r   zEmail must be providedr   Tr=   r   zThe email is already workingrF   rG   rH   rD   )rI   rJ   rK   rI   rL   z^We encountered an issue sending the verification email. Please contact support for assistance.zOtp sent successsfully)r   rI   )r0   rP   rv   r   r   rQ   rT   rU   rV   rW   rX   rY   rZ   updater   r   r]   r   r^   r_   r`   ra   )rb   rc   r0   r=   re   rf   app_user_objrg   rM   rh   ri   rj   rk   rl   s                 r6   rm   zRestoreAccount.post   s   ,V
,488G5	5  _Y 89&B]^^^^
 ''eT'JJPPRR; rY >?H`aaaaT4++G?)))66==	 >  L G#$=w?OPPL M)J	Br	^G]J<XXXXX r r ri  "B  C  LR  Lq  r  r  r  r  r  r  r  r  rr 7gFF
G
GG	 V V V
Is1vv&v/T
U
U
UUUUUUUVs\   AE3 AE3 #A.E3 D- ,E3 -
E7EEE3 EE3 3
F1=)F,&F1,F1Nrn   rr   r8   r6   r   r      s(        -V -V -V -V -Vr8   r   c                       e Zd Zd ZdS )RestoreAccountOtpVerificationc                    	 |j         }|                    d          }|                    d          }|st          ddit          j                  S |st          ddit          j                  S 	 t
          j                            ||          }n5# t          $ r(}t          di d	t          j                  cY d }~S d }~ww xY wd |_        |	                                 t          j                            d
|j        z   dz   d           t          ddi          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr=   rI   r   r   r   r   r   r   r   zThe account with z has been restored successfullytrainer_restoredr   r   )r0   rP   r   r   rQ   rT   rU   r_   end_dater\   r   r[   r<   ra   r`   rb   rc   r0   r=   rI   re   rl   s          r6   rm   z"RestoreAccountOtpVerification.post0  s   T488G5	%3
 XY236;VWWWW
 VY019TUUUU\/%%Ec%::KK
 \ \ \}B77v?Z[[[[[[[[[\ ;$$/BKDY/Y[|/|  EW$  X  X  X
Ii(
)
))	 T T T
Ic!ff%V-R
S
S
SSSSSSSTsU   AD! D! 2!B D! 
CC;C<D! CAD! !
E+)EEENrn   rr   r8   r6   r   r   /  s(        T T T T Tr8   r   c                       e Zd Zd ZdS )	LoginUserc                 "   	 |j         }|                    d          }|                    d          }|                    d          }|                    d          }|st          ddit          j                  S |st          ddit          j                  S t
          j                            |                                          }|d	k    rt          dd
it          j	                  S t
          j                            |dd          
                                }|st          ddit          j                  S |j        }	t          j        ||	          }
|
rQ|j        dk    rt!          j        ddd          }||_        |                                 d}t)          dd|i          }|}t*          j        }|}	 t/          j        ||||g|           n4# t2          $ r'}t          ddit          j                  cY d }~S d }~ww xY wt          ddit          j                  S ||_        ||_        |                                 t;          j        |          }|j        |j         |j!        |j"        tG          |          tG          |j$                  d}t          d|d          S t          ddit          j                  S # t2          $ r4}t          dtG          |          it          j                  cY d }~S d }~ww xY w)Nr=   r>   rB   r}   r   zInvalid credentialsr   rD   r   z:This email does not exist in our database, please registerT)r=   r   r   z=Your account has not been activated, Please contact to admin.FrF   rG   rH   rJ   rK   rI   rL   z>Failed to send the verification email. Please try again later.zPlease verify your email firstr   zLogin Successfullyr   zInvalid password)%r0   rP   r   r   rQ   rT   rU   rV   countHTTP_404_NOT_FOUNDrW   HTTP_401_UNAUTHORIZEDr>   rR   verifyr   rY   rZ   rI   r\   r   r   r]   r   r^   r_   r`   rB   r}   r   r   r   r<   r=   r   ra   r   )rb   rc   r0   r=   r>   rB   r}   userre   check_passwordcheckrf   rg   rM   rh   ri   rj   rk   r   r   rl   s                        r6   rm   zLoginUser.postH  sw   6T
,488G5hhz""8xx$$9-((;
 ZY45V=XYYYY
 ZY45V=XYYYY?!!!..44664
aiiY[\djd}~~~~/((uDRV(WW]]__;
 EY^_gm  hD  E  E  E  E(>>(>225 X!U**dD!,,W[_W$%>@PQQ\!]*Z
RS
nWmZ"LYYYYY S S Sy"bclr  mR  S  S  S  S  S  S  S  S  SS i @AIdeeee%K)K )+66M.&'<M""=-..	 	G 37CCDDDY12&:VWWWW	 T T T
Ic!ff%V-R
S
S
SSSSSSSTsv   A9K <K AK 0AK A?K G K 
H(H
HK 
HK /BK 3K 
L)L	L	LNrn   rr   r8   r6   r   r   G  s(        7T 7T 7T 7T 7Tr8   r   c                       e Zd Zd ZdS )ForgetPasswordc                    	 |j         }|                    d          }|st          ddi          S t          j                            |d                                          }|dk    rt          ddit          j                  S t          j                            |d          	                                }|rt          j        d	d
d          }||_        |                                 d}t          dd|i          }|}	t          j        }
|}	 t#          j        ||	|
|g|           n4# t&          $ r'}t          ddit          j                  cY d }~S d }~ww xY wt          ddi          S t          ddi          S # t&          $ rC}t+          |           t          dt-          |          it          j                  cY d }~S d }~ww xY w)Nr=   r   zEmail is requiredTr   r   zPThis email does not exist in our database, please enter the valid email address.r   rF   rG   rH   zForgot Passwordzforget_password_email.htmlrI   rL   z8Failed to send the forgot email. Please try again later.z7Reset password otp has been sent to your email address.zEmail not exists)r0   rP   r   rT   rU   rV   r   r   r   rW   rY   rZ   rI   r\   r   r   r]   r   r^   r_   r`   r   ra   )rb   rc   r0   r=   r   re   rf   rg   rM   rh   ri   rj   rk   rl   s                 r6   rm   zForgetPassword.post  s?   U<DHHWE 6i 34555O"""EEKKMMDqyyi rs  |B  |U  V  V  V  V?))t)LLRRTTK 5dD!,,W[_ W$%AE7CSTT\!]*Z
RM
nWmZ"LYYYYY M M My"\]fl  gL  M  M  M  M  M  M  M  M  MM i YZ[[[i 23444
 U U U	!HHHYs1vv&f.STTTTTTTTTUs`   .F AF B
F D- ,F -
E7EEF EF 2F 
G8GGGNrn   rr   r8   r6   r   r     s(         U  U  U  U  Ur8   r   c                       e Zd Zd ZdS )ForgetPasswordVerificationc                 .   	 |j         }|                    d          }|                    d          }|st          ddit          j                  S |st          ddit          j                  S t
          j                            |d|                                          }|st          d	i d
t          j                  S t          ddi          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr=   rI   r   r   r   r   T)r=   r   rI   r   r   r   )r0   rP   r   r   rQ   rT   rU   rV   rW   r_   ra   r`   r   s          r6   rm   zForgetPasswordVerification.post  s.   T488G5	%3
 XY236;VWWWW
 VY019TUUUU''eTc'RRXXZZ;
 \}B77v?Z[[[[
Ii(
)
))	 T T T
Ic!ff%V-R
S
S
SSSSSSSTs1   AC C 1AC C 
D )D	DDNrn   rr   r8   r6   r   r     s(        T T T T Tr8   r   c                       e Zd Zd ZdS )SetForgetPasswordc                    	 |j         }|                    d          }|                    d          }|                    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 t
          j                            ||	                                          }t          j
        |          }|r3||_        d |_        |                                 t          dd
i          S t          ddit          j                  S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr=   rd   rI   r   znew_password is requiredr   r   r   r   r   zSomething went wrong)r0   rP   r   r   rQ   rT   rU   rV   rW   rR   rS   r>   rI   r\   r_   ra   r`   )	rb   rc   r0   r=   rd   rI   re   encrypt_passwordrl   s	            r6   rm   zSetForgetPassword.post  s   T488G5((>**<	%3
 _Y9:&B]^^^^
 XY236;VWWWW
 VY019TUUUU''e'<<BBDD;l<00 [+KKOYy)***Y56f>YZZZZ	 T T T
Ic!ff%V-R
S
S
SSSSSSSTs7   A$D> 'D> D> %A;D> !D> >
E<)E71E<7E<Nrn   rr   r8   r6   r   r     s(        T T T T Tr8   r   c                       e Zd Zd ZdS )
getProfilec                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S t          |          j        }t          d|d          S # t          $ r4}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   ra   r   r   rT   rU   rV   rW   r   TrainerSerializerr0   r`   )rb   rc   uidrl   re   r   s         r6   rP   zgetProfile.get  s2   TL

 
 CC
 L L LYs1vv&f.JKKKKKKKKKL''3'//5577;
 UY 01&:STTTT[)).7
iw77
8
88	 T T T
Ic!ff%V-R
S
S
SSSSSSSTsJ    C 
A)AAC AAC %%C 
D	)D>D	D	Nro   rp   rq   rP   rr   r8   r6   r   r     s(        T T T T Tr8   r   c                       e Zd Zd ZdS )EditProfilec                 j   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|                    d          }|                    d          }|                    d          }	|                    d	          }
|                    d
          }|                    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 ||_        ||_        ||_        |
|_        ||_        ||_        |	r|	|_        |                                 t          ddi          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   r<   genderageimage
specialitydescriptiontotal_experiencer~   zgender is requiredzage is requiredr   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   r<   r   r   r   r   r   r   r\   r`   )rb   rc   r   rl   re   r0   r<   r   r   r   r   r   r   s                r6   rm   zEditProfile.post  sa   )VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 UY 01&:STTTT
,4xx$$9HHX6	%388G5&&:-((;hh122
 ^Y 78A\]]]]
 [Y 45f>YZZZZ
 XY 126;VWWWW %;;;?&;(;"2; K
Iy)
*
**	 V V V
Is1vv&v/T
U
U
UUUUUUUVs^    G4 
A)AAG4 AAG4 %B8G4 G4 =G4 AG4 4
H2>)H-'H2-H2Nrn   rr   r8   r6   r   r     (        *V *V *V *V *Vr8   r   c                       e Zd Zd ZdS )UploadImagesc                 ~   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }g }|D ]&}t          |          }	|                    |	           't          d|d          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   Trainer not foundimagesr   r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   getlistuploadTheProfileappendr`   )
rb   rc   r   rl   re   r0   r   
image_urlsr   
image_paths
             r6   rm   zUploadImages.post  sv   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW
,4LL""6: " "u!%((Jj!!!! y
;;
<
<<	 V V V
Is1vv&v/T
U
U
UUUUUUUVsK    C> 
A)AAC> AAC> %AC> >
D<)D71D<7D<Nrn   rr   r8   r6   r   r     (        V V V V Vr8   r   c                       e Zd Zd ZdS )RemoveImagec                 X   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|st          ddit          j                  S t          j                            t"          j        |          }t          j                            |          r%t          j        |           t          ddi          S t          ddit          j
                  S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)	Nr   r   r   r   r   image is requiredzImage deleted successfully.zImage not found.)r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   ospathjoinr   
MEDIA_ROOTexistsremover`   )rb   rc   r   rl   re   r0   
image_namer   s           r6   rm   zRemoveImage.post0  s   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 UY 01&:STTTT
,4!!:
 XY236;VWWWWX0*==:gnnZ   WIj Y =>???Y 23F<UVVVV	 V V V
Is1vv&v/T
U
U
UUUUUUUVsW    E+ 
A)AAE+ AAE+ %:E+  A-E+ E+ +
F)5)F$F)$F)Nrn   rr   r8   r6   r   r   /  (        V V V V Vr8   r   c                       e Zd Zd ZdS )DeleteAccountc                 F   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S t          j                    |_        |                                 t          ddi          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   zAccount deleted successfully)r   r_   r   ra   r   r   rT   rU   rV   rW   r   r   nowr   r\   r`   rb   rc   r   rl   re   s        r6   rm   zDeleteAccount.postR  sB   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW",..;
I=>
?
??	 V V V
Is1vv&v/T
U
U
UUUUUUUVsJ    C" 
A)AAC" AAC" %<C" "
D ,)DD D Nrn   rr   r8   r6   r   r   Q  s(        V V V V Vr8   r   c                       e Zd Zd ZdS )GetTrainerFaqc                 \   	 t           j                            dd                              d          }t	          |d          j        }t          d|d          S # t          $ rC}t          |           t          dt          |          it          j        	          cY d }~S d }~ww xY w)
NTtrainer)r   r   -idmanyr   r   r   r   )r   rU   rV   order_byr    r0   r   r_   r   ra   r   r`   )rb   rc   faq_objall_datarl   s        r6   rP   zGetTrainerFaq.gete  s    T[$IFFOOPUVV7G...38
ix88
9
99	 T T T888
Ic!ff%V-R
S
S
SSSSSSSTs   AA 
B+(8B& B+&B+Nr   rr   r8   r6   r   r   d  s(        T T T T Tr8   r   c                       e Zd Zd ZdS )GetTrainerPrivacyPolicyc                 8   	 t           j                            dd                                          }t	          |          j        }t          d|d          S # t          $ r4}t          dt          |          it          j
                  cY d }~S d }~ww xY w)NzPrivacy Policyr   	page_type	user_typer   r   r   r   r   rU   rV   rW   r   r0   r   r_   ra   r   r`   rb   rc   content_objr   rl   s        r6   rP   zGetTrainerPrivacyPolicy.getp  s    T#+22=MXa2bbhhjj;[)).7
iw77
8
88	 T T T
Ic!ff%V-R
S
S
SSSSSSST   AA 
B%)BBBNr   rr   r8   r6   r   r   o  (        T T T T Tr8   r   c                       e Zd Zd ZdS )GetTrainerTermsc                 8   	 t           j                            dd                                          }t	          |          j        }t          d|d          S # t          $ r4}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        r6   rP   zGetTrainerTerms.gety  s    T#+22=Q\e2ffllnn;[)).7
iw77
8
88	 T T T
Ic!ff%V-R
S
S
SSSSSSSTr   Nr   rr   r8   r6   r   r   x  r   r8   r   c                       e Zd Zd ZdS )GetExerciseListc                 ^   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S t          j                            |d          }t          |d          j        }t          d|d	          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)
Nr   r   r   r   Tr   r   r   r   r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   ExerciseExerciseSerializerr0   r`   )rb   rc   r   rl   re   exercise_objexercise_serializers          r6   rP   zGetExerciseList.get  sW   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW"))+QU)VV<+LtDDDI
i/BCC
D
DD	 V V V
Is1vv&v/T
U
U
UUUUUUUVK    C. 
A)AAC. AAC. %AC. .
D,8)D'!D,'D,Nr   rr   r8   r6   r   r     (        V V V V Vr8   r   c                       e Zd Zd ZdS )AddExercisec                 z   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|                    d          }|                    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 t          j                            ||||          }	t          ddi          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   User not foundnamer   r   name is requireddescription is requiredr   )r   r  r   r   r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   r  r[   r`   )
rb   rc   r   rl   re   r0   r  r   r   r  s
             r6   rm   zAddExercise.post  s    VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 UY 01&:STTTT
,4
((6

4-((;88G5
 YY 23F<WXXXX
 `Y 9:6C^____
 ZY 34V=XYYYY"))
	 *  < Ii(
)
))	 V V V
Is1vv&v/T
U
U
UUUUUUUV]    E< 
A)AAE< AAE< %A$E< 
E< )E< 3E< <
F:)F5/F:5F:Nrn   rr   r8   r6   r  r    (        !V !V !V !V !Vr8   r  c                       e Zd Zd Zd ZdS )EditExercisec                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|st          ddit          j                  S t          j                            ||d          	                                }t          |          j        }t          d	|d
          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   exercise_idexercise_id is requiredTr   r   r   r   r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   query_paramsrP   rQ   r  r  r0   r`   )	rb   rc   r   rl   re   r0   r  r  r  s	            r6   rP   zEditExercise.get  s   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW

4-((;
 `Y 9:6C^____"))[^b)cciikk<+L99>
i/BCC
D
DD	 V V V
Is1vv&v/T
U
U
UUUUUUUVsQ    D: 
A)AAD: AAD: %:D:  AD: :
E8)E3-E83E8c                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|                    d          }|                    d          }|                    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 t          j                            ||d          	                                }
|
st          ddit          j
                  S ||
_        ||
_        |	|
_        |
                                 t          ddi          S # t          $ r4}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  Tr  Exercise not foundr   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   r  r  r   r   r\   r`   )rb   rc   r   rl   re   r0   r  r  r   r   r  s              r6   rm   zEditExercise.post  sy   $VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 UY 01&:STTTT
,4-((;
((6

4-((;88G5
 YY 23F<WXXXX
 `Y 9:6C^____
 ZY 34V=XYYYY
 `Y 9:6C^____"))[+_c)ddjjll<
 YY 45f>WXXXX<'<<
Ii(
)
))	 V V V
Is1vv&v/T
U
U
UUUUUUUVsj    H	 
A)AAH	 AAH	 %A9H	 H	 >H	 H	 <AH	 9H	 	
I)I<IINro   rp   rq   rP   rm   rr   r8   r6   r  r    :        V V V&%V %V %V %V %Vr8   r  c                       e Zd Zd ZdS )DeleteExercisec                 z   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|st          ddit          j                  S t          j                            ||d          	                                }|st          dd	it          j
                  S t          j                    |_        |                                 t          dd
it          j                  S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r
  r  r  Tr  r  zExercise deleted successfully)r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   r  r   r   r   r\   HTTP_200_OKr`   )rb   rc   r   rl   re   r0   r  r  s           r6   rm   zDeleteExercise.post  s   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 UY 01&:STTTT
,4-((;  `Y 9:6C^____"))[+_c)ddjjll<
 YY 45f>WXXXX!<
I>?HZ
[
[
[[	 V V V
Is1vv&v/T
U
U
UUUUUUUVsX    E< 
A)AAE< AAE< %:E<  AE< 3AE< <
F:)F5/F:5F:Nrn   rr   r8   r6   r  r    (        V V V V Vr8   r  c                       e Zd Zd ZdS )GetSubExerciseListc                 <   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|st          ddit          j                  S t          j                            ||d          	                                }t          j                            |d	          }t!          |d
          j        }	t          d|	d          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   r  r  Tr  )exerciser   r   r   r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r  rP   rQ   r  SubExerciseSubExerciseSerializerr0   r`   )
rb   rc   r   rl   re   r0   r  r  sub_exercise_objsub_exercise_serializers
             r6   rP   zGetSubExerciseList.get  s   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW

4-((;
 `Y 9:6C^____"))[^b)cciikk<!)00,Z^0__23C$OOOT
i/FGG
H
HH	 V V V
Is1vv&v/T
U
U
UUUUUUUVsQ    E 
A)AAE AAE %:E  A<E 
F')FFFNr   rr   r8   r6   r!  r!    (        V V V V Vr8   r!  c                       e Zd Zd ZdS )AddSubExercisec                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|                    d          }|                    d          }|                    d          }	|                    d	          }
|                    d
          }|                    d          }|                    d          }|                    d          }|                    d          }|                    d          }|                    d          }|                    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 t          j                            |d          	                                }t          j                            ||||	|
||||||||          }t          ddi          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r
  r  r  r   commentsnote
focus_areasetsrepsweightyoutube_linkr   videos
video_linkr  r  r  comments is requiredfocus_area is requiredsets is requiredreps is requiredweight is requiredTr   r   )r#  r  r   r,  r-  r.  r/  r0  r1  r2  r4  r   r3  r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   r  r$  r[   r`   )rb   rc   r   rl   re   r0   r  r  r   r,  r-  r.  r/  r0  r1  r2  r   r3  r4  r  r&  s                        r6   rm   zAddSubExercise.post2  s   FVN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 UY 01&:STTTT
,4-((;
((6

4-((;hhz""8
((6

4&&:
((6

4
((6

4HHX6((>**<HHX6HHX6&&:
 `Y 9:6C^____
 YY 23F<WXXXX
 `Y 9:6C^____
 ]Y 67@[\\\\  _Y 89&B]^^^^
 YY 23F<WXXXX
 YY 23F<WXXXX
 [Y 45f>YZZZZ "))[$)OOUUWW<!)00
  1    Ii(
)
))	 V V V
Is1vv&v/T
U
U
UUUUUUUVs|    L% 
A)AAL% AAL% %D6L% L% ;L% L% 9L% L% 7L% L% 5A/L% %
M#/)MM#M#Nrn   rr   r8   r6   r*  r*  1  s-        GV GV GV GV GVr8   r*  c                       e Zd Zd Zd ZdS )EditSubExercisec                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|st          ddit          j                  S t          j                            |          	                                }t          |          j        }t          d|d          S # t          $ r4}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   ra   r   r   rT   rU   rV   rW   r   r  rP   rQ   r$  r%  r0   r`   )	rb   rc   r   rl   re   r0   r  r&  r'  s	            r6   rP   zEditSubExercise.get|  s   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW

4-((;
 `Y 9:6C^____!)00K0@@FFHH23CDDI
i/FGG
H
HH	 V V V
Is1vv&v/T
U
U
UUUUUUUVsQ    D8 
A)AAD8 AAD8 %:D8  AD8 8
E6)E1+E61E6c                 H   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|                    d          }|                    d          }|                    d          }	|                    d	          }
|                    d
          }|                    d          }|                    d          }|                    d          }|                    d          }|                    d          }|                    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 t          j                            |          	                                }|st          ddit          j
                  S ||_        ||_        |	|_        |
|_        ||_        ||_        ||_        ||_        ||_        ||_        ||_        |                                 t          ddi          S # t          $ r4}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/  r0  r1  r2  r   r3  r  r  r  r5  r6  r7  r9  r8  r  r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   r$  r  r   r,  r-  r.  r/  r1  r0  r2  r   r3  r\   r`   )rb   rc   r   rl   re   r0   r  r  r   r,  r-  r.  r/  r0  r1  r2  r   r3  r&  s                      r6   rm   zEditSubExercise.post  s   DVN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 UY 01&:STTTT
,4-((;
((6

4-((;hhz""8
((6

4&&:
((6

4
((6

4HHX6((>**<HHX6HHX6
 YY 23F<WXXXX
 `Y 9:6C^____
 `Y 9:6C^____
 ]Y 67@[\\\\  _Y 89&B]^^^^
 YY 23F<WXXXX
 [Y 45f>YZZZZ
 YY 23F<WXXXX ")00K0@@FFHH
 YY 45f>WXXXX +'!+##/ !#
Ii(
)
))	 V V V
Is1vv&v/T
U
U
UUUUUUUVs    M# 
A)AAM# AAM# %D!M# M# &M# M# $M# M# "M# M#  AM# 1A1M# #
N!-)NN!N!Nr  rr   r8   r6   r<  r<  {  s?        V V V&EV EV EV EV EVr8   r<  c                       e Zd Zd ZdS )DeleteSubExercisec                 ^   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|st          ddit          j                  S t          j                            |          	                                }|st          ddit          j
                  S t          j                    |_        |                                 t          ddi          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)	Nr   r   r   r
  r  r  r  z Subexercise deleted successfully)r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   r$  r   r   r   r\   r`   )rb   rc   r   rl   re   r0   r  r&  s           r6   rm   zDeleteSubExercise.post  s   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 UY 01&:STTTT
,4-((;  `Y 9:6C^____ ")00K0@@FFHH
 YY 45f>WXXXX%\^^
I@A
B
BB	 V V V
Is1vv&v/T
U
U
UUUUUUUVsW    E. 
A)AAE. AAE. %:E.  AE. 1<E. .
F,8)F'!F,'F,Nrn   rr   r8   r6   r@  r@    (        V V V V Vr8   r@  c                       e Zd Zd ZdS )GetVideosListc                 \   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S t          j                            |          }t          |d          j        }t          d|d	          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w
Nr   r   r   r   r   Tr   r   r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   VideosVideosSerializerr0   r`   )rb   rc   r   rl   re   
videos_objvideos_serializers          r6   rP   zGetVideosList.get  sS   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW%%k%:::'
>>>C
i/@AA
B
BB	 V V V
Is1vv&v/T
U
U
UUUUUUUVK    C- 
A)AAC- AAC- %AC- -
D+7)D& D+&D+Nr   rr   r8   r6   rD  rD    r  r8   rD  c                       e Zd Zd ZdS )	AddVideosc                 z   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|                    d          }|                    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 t          j                            ||||          }	t          ddi          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r
  r*   
media_type	media_urltitle is requiredmedia_type is requiredmedia_url is required)r   r*   rP  rQ  r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   rH  r[   r`   )
rb   rc   r   rl   re   r0   r*   rP  rQ  rJ  s
             r6   rm   zAddVideos.post  s    VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 UY 01&:STTTT
,488G5&&:xx$$9
 ZY 34V=XYYYY
 _Y 89&B]^^^^
 ^Y 78A\]]]]%%	 &  : Ii(
)
))	 V V V
Is1vv&v/T
U
U
UUUUUUUVr  Nrn   rr   r8   r6   rN  rN  
  r  r8   rN  c                       e Zd Zd Zd ZdS )
EditVideosc                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|st          ddit          j                  S t          j                            ||          	                                }t          |          j        }t          d|d	          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)
Nr   r   r   r   video_idvideo_id is requiredr   r   r   r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r  rP   rQ   rH  rI  r0   r`   )	rb   rc   r   rl   re   r0   rX  rJ  rK  s	            r6   rP   zEditVideos.get/  s   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW

4hhz""8
 ]Y 67@[\\\\%%+%FFLLNN:'
338
i/@AA
B
BB	 V V V
Is1vv&v/T
U
U
UUUUUUUVsQ    D9 
A)AAD9 AAD9 %:D9  AD9 9
E7)E2,E72E7c                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|                    d          }|                    d          }|                    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 t          j                            ||          	                                }
|
st          ddit          j
                  S ||
_        ||
_        |	|
_        |
                                 t          ddi          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r
  rX  r*   rP  rQ  rY  rR  rS  rT  rZ  zVideo not foundr   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   rH  r*   rP  rQ  r\   r`   )rb   rc   r   rl   re   r0   rX  r*   rP  rQ  	video_objs              r6   rm   zEditVideos.postB  sr   $VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 UY 01&:STTTT
,4hhz""888G5&&:xx$$9
 ]Y 67@[\\\\
 ZY 34V=XYYYY
 _Y 89&B]^^^^
 ^Y 78A\]]]]~$$+$FFLLNN9
 VY 126;TUUUU9?"9 9>>
Ii(
)
))	 V V V
Is1vv&v/T
U
U
UUUUUUUVsj    H 
A)AAH AAH %A9H H >H H <AH 9H 
I)I;IINr  rr   r8   r6   rV  rV  .  r  r8   rV  c                       e Zd Zd ZdS )
AddStudentc                 p   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|                    d          }|                    d          }t                      }	|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                            |          	                                }
|
rt          ddit          j                  S t          j                            |          	                                }|rt          ddit          j                  S t#          j        |	          }t          j                            ||||d          }t(          j                            ||d           d}t+          d||	d          }|}t,          j        }|}	 t1          j        ||||g|           n4# t          $ r'}t          ddit          j                  cY d }~S d }~ww xY wt          ddi          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r
  r<   r=   phone_numberr~   r   phone_number is requiredzpassword is requiredrD   rE   )r`  z&The phone number is already registeredT)r<   r=   r`  r>   r   )app_userr   follow_request_statusz&Welcome to FitnessIQ! Get Started Now.zstudent_registered.html)r=   r>   rL   z~Your student has been added, but we encountered an issue sending the verification email. Please contact support for assistancesuccess)r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   randomPasswordStringFunctionrQ   AppUserrX   rR   rS   r[   Studentsr   r   r]   r   r^   r`   )rb   rc   r   rl   re   r0   r<   r=   r`  r>   student_objstudent_obj_numberrd   r   rg   rM   rh   ri   rj   rk   s                       r6   rm   zAddStudent.postk  s   7TN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 UY 01&:STTTT
,4xx$$988G5((>**<*,,8
 \Y67v?Z[[[[
 XY236;VWWWW
 _Y9:&B]^^^^
 [Y56f>YZZZZ''e'44::<<; eY AB6Kcdddd  ..L.IIOOQQ lY HIRXRjkkkk ,x((</((95Vblx  IM(  N  N<L[_```57"#<Ya>b>bcc<=(:2QN7M:t,WWWWW
 Q Q QY  !a  b  kq  kP  Q  Q  Q  Q  Q  Q  Q  Q  QQ Ii(
)
))	 T T T
Ic!ff%V-R
S
S
SSSSSSSTs    K7 
A)AAK7 AAK7 %A2K7 K7 7K7 K7 5AK7 AK7 A?K7 J2 1K7 2
K#<KK#K7 K##K7 7
L5)L0*L50L5Nrn   rr   r8   r6   r^  r^  j  s(        8T 8T 8T 8T 8Tr8   r^  c                       e Zd Zd ZdS )GetStudentListc                    	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S t          j                            |d          }t          |d          j        }t          |           t          d|d	          S )
Nr   r   r   r   T)r   rc  r   r   r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   rg  StudentSerializerr0   r   )rb   rc   r   rl   re   rh  student_serializers          r6   rP   zGetStudentList.get  s   M	w		33	 M M M
Is1vv&v/K
L
L
LLLLLLLM &&#&..4466+	 W
I23F<U
V
V
VV ''RV'WW+(4@@@E	Y.@AA	B	BBs    
A)AAANr   rr   r8   r6   rk  rk    s(        C C C C Cr8   rk  c                       e Zd Zd ZdS )GetStudentDetailc                 0   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|st          ddit          j                  S t          j                            |          	                                }|st          ddit          j
                  S t          |          j        }t          d|d	          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)
Nr   r   r   r   
student_idstudent_id is requiredStudent not foundr   r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r  rP   rQ   rg  rm  r0   r`   )	rb   rc   r   rl   re   r0   rr  rh  rn  s	            r6   rP   zGetStudentDetail.get  s   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW

4&&:
 _Y 89&B]^^^^!((J(77==??;
 XY 34V=VWWWW *+66; y2DEE
F
FF	 V V V
Is1vv&v/T
U
U
UUUUUUUVW    E 
A)AAE AAE %:E  AE 1%E 
F!)F
FFNr   rr   r8   r6   rp  rp    r   r8   rp  c                       e Zd Zd ZdS )PendingFollowRequestListc                 ^   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S t          j                            |d          }t          |d          j        }t          d	|d
          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   F)
trainer_idrc  Tr   r   r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   rg  rm  r0   r`   )rb   rc   r   rl   re   pending_requestsrequests_serializers          r6   rP   zPendingFollowRequestList.get  sY   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW&--\a-bb*+;$GGGL
i/BCC
D
DD	 V V V
Is1vv&v/T
U
U
UUUUUUUVr  Nr   rr   r8   r6   rw  rw    (        V V V V Vr8   rw  c                       e Zd Zd ZdS )AcceptFollowRequestc                 :   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|st          ddit          j                  S t          j                            |          }d|_        |                                 |j        j        rw|j        j        }t          t(          j                  }	|j        j        dk    rt/          |d	|j        d
z              |j        j        dk    rt/          |d	|j        d
z              t          ddi          S # t          j        $ r  t          ddit          j
                  cY S t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   follow_request_idFollow request ID is requiredTAndroidzREQUEST ACCEPTED accepted your follow request.Iosz$Follow request accepted successfullyFollow request not found)r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   rg  rc  r\   rb  notification_statusrB   r   FIREBASE_SERVER_KEYr}   r7   r<   DoesNotExistr`   )
rb   rc   r   rl   re   r0   r  follow_requestr4   
server_keys
             r6   rm   zAcceptFollowRequest.post  sS    VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW
,4xx 344
 fY ?@Ideeee$((,=(>>>*.>'1 {$-7OX122J*i77O-?AVYyAyzzz*e33O-?AVYyAyzzz
IEF
G
GG		 ^ ^ ^
I9:6C\
]
]
]]]]	 V V V
Is1vv&v/T
U
U
UUUUUUUVsW    F/ 
A)AAF/ AAF/ %:F/  CF/ /,H	H&)HHHNrn   rr   r8   r6   r~  r~    r  r8   r~  c                       e Zd Zd ZdS )RejectFollowRequestc                 &   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|st          ddit          j                  S t          j                            |          }|                                 t          ddi          S # t          j        $ r  t          ddit          j
                  cY S t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)	Nr   r   r   r   r  r  z$Follow request rejected successfullyr  )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   rg  deleter  r`   )rb   rc   r   rl   re   r0   r  r  s           r6   rm   zRejectFollowRequest.post  s   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW
,4xx 344
 fY ?@Ideeee$((,=(>>>
IEF
G
GG		 ^ ^ ^
I9:6C\
]
]
]]]]	 V V V
Is1vv&v/T
U
U
UUUUUUUVsW    D% 
A)AAD% AAD% %:D%  AD% %,F	F)FFFNrn   rr   r8   r6   r  r    s(        V V V V Vr8   r  c                       e Zd Zd ZdS )getTrainerNotificationsc                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S t          j                            |d                              d          }t          j                            |j        dd	                                          }g }|D ]B}|j        |j        |j        t#          |j                  d
z   d}	|                    |	           Ct          t          j        d||d          S # t          $ r?}t          t          j        t          |          dt          j                  cY d }~S d }~ww xY w)Nr   r   r   r   Tr   r   F)r   r   is_read ago)r   r   notification_type
start_date )status_codestatus_messager0   unread_notificationsr  r  )r   r_   r   ra   r   r   rT   rU   rV   rW   r   TrainerNotificationr   r   r   r   r   r!   r  r   r  r`   )
rb   rc   r   rl   re   
notify_objnotification_countr   notifyalldatas
             r6   rP   zgetTrainerNotifications.get3  s   ON

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW#+22;Z^2__hhinoo:)188cgpu8vv||~~7  v
)!;F-..v5	 G NN7
6#5rQX  qC  D  D  E  E  E	 O O O
&"GY\]^Y_Y_``hn  iN  O  O  O  O  O  O  O  O  OOsK    E7 
A)AAE7 AAE7 %CE7 7
G 4F;5G ;G Nr   rr   r8   r6   r  r  2  s(        O O O O Or8   r  c                       e Zd Zd ZdS )deleteTrainerNotificationsc                 ,   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j                            d          }|s(t          t          j        ddt          j                  S t          j                            |                              t!          j                               t          t          j        d	d          S # t          $ r?}t          t          j        t          |          dt          j                  cY d }~S d }~ww xY w)
Nr   r   r   r   notification_idzNotification Id is requiredr  )r   z!Notification Deleted Successfully)r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   r  r   r   r   r  r`   )rb   rc   r   rl   re   r  s         r6   rm   zdeleteTrainerNotifications.postM  s   ON

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWWl&&'899?
 S6#>Pmnnv|  wR  S  S  S  S%%%99@@(,..@YYY
&"4Fijj
k
kk	 O O O
&"GY\]^Y_Y_``hn  iN  O  O  O  O  O  O  O  O  OOsR    E
 
A)AAE
 AAE
 %AE
 )A E
 

F4FFFNrn   rr   r8   r6   r  r  L  s(        O O O O Or8   r  c                       e Zd Zd ZdS )deleteTrainerAccountc                 P   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S d|_        |                                 t          t          j        dd          S # t          $ r?}t          t          j        t          |          dt          j                  cY d }~S d }~ww xY w)Nr   r   r   r   TzAccount Deleted Successfullyr  )r   r_   r   ra   r   r   rT   rU   rV   rW   r   is_account_deletedr\   r  r`   r   s        r6   rm   zdeleteTrainerAccount.postb  sl   ON

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW$(;!
&"4Fdee
f
ff	 O O O
&"GY\]^Y_Y_``hn  iN  O  O  O  O  O  O  O  O  OOsJ    C 
A)AAC AAC %6C 
D%&4D D% D%Nrn   rr   r8   r6   r  r  a  s(        O O O O Or8   r  c                       e Zd Zd ZdS )	AddFriendc                 \   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|st          ddit          j                  S 	 t          j                            |          }n2# t          j        $ r  t          ddit          j
                  cY S w xY wt          j                            ||          	                                }|st          j                            ||d	          }|j        }	t%          d
|	           t          t&          j                  }
|j        dk    r(t%          d           t-          |	d|j        dz              |j        dk    r(t%          d           t-          |	d|j        dz              t0          j                            |j        dz   d|           t          ddi          S t          ddi          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   	friend_idzfriend_id is required)	from_userto_userF)r  r  acceptedr4   r  1111111111111111111111111zNEW FOLLOW REQUEST RECEIVEDz sent you a follow request.r  2222222222222222222222222friend_request_receivedr   r   r   rd  zRequest already sent)r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   r  TrainerFriendsr[   rB   r   r   r  r}   r7   r<   r  r`   )rb   rc   r   rl   re   r0   r  friendfriendship_requestr4   r  s              r6   rm   zAddFriend.postu  s"   +UN

 
 CC
 N N NYA'0LMMMMMMMMMN''3'//5577;
 XY 34V=VWWWW
,4xx$$9
 \Y67v?Z[[[[X_  I ..FF

 X X XY 34V=VWWWWWWX '.55U[5\\bbdd
 9'/66V\gl6mm &O	
O,,,X122JY&&
&'''O-JKLa  dA  MA  B  B  BU""
&'''O-JKLa  dA  MA  B  B  B
 &&{/DEb/b  iB  KQ&  R  R  RY	*+++Y 67888	 U U UYs1vv&f.STTTTTTTTTUsu    I- 
A)AAI- AAI- %:I- ! D I- ,D1.I- 0D11D*I- I- -
J+7)J& J+&J+Nrn   rr   r8   r6   r  r  t  s(        ,U ,U ,U ,U ,Ur8   r  c                       e Zd Zd ZdS )AcceptRejectRequestc                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|                    d          }|st          ddit          j                  S |st          ddit          j                  S 	 t          j                            |d	
          }n2# t          j        $ r  t          ddit          j
                  cY S w xY w|dk    rd|_        |                                 |j        j        rx|j        j        }	t          t*          j                  }
|j        j        dk    rt1          |	d|j         d           n)|j        j        dk    rt1          |	d|j         d           t4          j                            |j         dd|j                   t          ddi          S |dk    r%|                                 t          ddi          S t          ddit          j                  S # t          $ r4}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 acceptedacceptTr  zRequest Acceptedr  r  friend_request_acceptedr  zFriend request acceptedrejectzFriend request rejectedz!Status type must be accept/reject)r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   r  r  r  r\   r  r  rB   r   r  r}   r7   r<   r  r[   r  r`   )rb   rc   r   rl   re   r0   r  status_typer  r4   r  s              r6   rm   zAcceptRejectRequest.post  sG   -VN

 
 CC
 N N NYA'0LMMMMMMMMMN''3'//5577;
 XY 34V=VWWWW
,4&&:(##;
 _Y 89&B]^^^^
 [Y 45f>YZZZZw'/33zE3RR

% w w wY RS\b\uvvvvvvw X"& #7 |)3=_h233Z$0I==_/A[EZBzBzBz{{{{

&
2e
;
;_/A[EZBzBzBz{{{
 &&+2G/g/g/g  oH  Rd  Rn&  o  o  oY 9:;;;xY 9:;;;Y CDVMhiiii	 V V V
Is1vv&v/T
U
U
UUUUUUUVs    J 
A)AAJ AAJ %AJ 5J !D7 6J 7,E&#J %E&&C'J *J 9J 
K )K	KKNrn   rr   r8   r6   r  r    (        .V .V .V .V .Vr8   r  c                       e Zd Zd ZdS )SentRequestsListc                 ^   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S t          j                            |d          }t          |d          j        }t          d	|d
          S # t          $ r4}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   ra   r   r   rT   rU   rV   rW   r   r  SentFriendListSerializerr0   r`   )rb   rc   r   rl   re   r  r   s          r6   rP   zSentRequestsList.get  sU   VN

 
 CC
 N N NYA'0LMMMMMMMMMN''3'//5577;
 XY 34V=VWWWW&.55V[5\\&'9EEEJ8
y(;;
<
<<	 V V V
Is1vv&v/T
U
U
UUUUUUUVr  Nr   rr   r8   r6   r  r    (        V V V V Vr8   r  c                       e Zd Zd ZdS )ReceivedRequestsListc                 ^   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S t          j                            |d          }t          |d          j        }t          d	|d
          S # t          $ r4}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   ra   r   r   rT   rU   rV   rW   r   r  ReceivedFriendListSerializerr0   r`   )rb   rc   r   rl   re   received_friendlistr   s          r6   rP   zReceivedRequestsList.get  sU   VN

 
 CC
 N N NYA'0LMMMMMMMMMN''3'//5577;
 XY 34V=VWWWW'/66{UZ6[[*+>TJJJO8
y(;;
<
<<	 V V V
Is1vv&v/T
U
U
UUUUUUUVr  Nr   rr   r8   r6   r  r    r  r8   r  c                       e Zd Zd ZdS )
FriendListc                 L   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S t          j                            t          |          t          |          z  t          d          z                                d	d
          }g }|D ]0}|j        |k    r|j        n|j        }|                    |           1t#          |d          j        }	t          d|	d          S # t          $ r4}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   ra   r   r   rT   rU   rV   rW   r   r  r   select_relatedr  r  r   AppTrainerFriendSerializerr0   r`   )
rb   rc   r   rl   re   friendsfriend_listr  friend_userr   s
             r6   rP   zFriendList.get  s   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW#**+ 6 6 66!T:J:J:JJ ^K++  ; $ $v$*$4$C$C&..IYK{####(4@@@E8
y(;;
<
<<	 V V V
Is1vv&v/T
U
U
UUUUUUUVsK    E% 
A)AAE% AAE% %B?E% %
F#/)FF#F#Nr   rr   r8   r6   r  r    (        V V V V Vr8   r  c                       e Zd Zd ZdS )SearchFriendc                 J   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|st          ddit          j                  S t          j                            t          |          t          |          z  d	
                              |j                  }t#          |d	d|i          j        }t          d|d          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   searchzSearch parameter is required)full_name__icontains)email__icontainsT)r   
login_user)r   contextr   r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r  rP   rQ   r   excluder   r  r0   r`   )	rb   rc   r   rl   re   r0   r  search_friend	user_datas	            r6   rP   zSearchFriend.get  s   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW

4HHX6
 eY >?Hcdddd?))!*H*H*H1^dKeKeKe*ex|)}}  F  F  JU  JX  F  Y  Y=)-d\[fLghhhm9
y)<<
=
==	 V V V
Is1vv&v/T
U
U
UUUUUUUVsQ    E$ 
A)AAE$ AAE$ %:E$  BE$ $
F".)FF"F"Nr   rr   r8   r6   r  r    r(  r8   r  c                       e Zd Zd ZdS )CancelSentRequestc                 6   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|st          ddit          j                  S 	 t          j                            |d          }n2# t          j        $ r  t          dd	it          j
                  cY S w xY w|                                 t          dd
i          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   r  r  Fr  r  zFriend request cancelled)r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   r  r  r  r`   )rb   rc   r   rl   re   r0   r  r  s           r6   rm   zCancelSentRequest.post/  s   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW
,4&&:
 _Y 89&B]^^^^w'/33zE3RR

% w w wY RS\b\uvvvvvvw 
I9:
;
;;	 V V V
Is1vv&v/T
U
U
UUUUUUUVsn    E 
A)AAE AAE %:E !!D E ,D2/E 1D22'E 
F$)FFFNrn   rr   r8   r6   r  r  .  r  r8   r  c                       e Zd Zd ZdS )AddAssessmentc                 <	   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|                    d          }|                    d          }|                    d          }	|                    d	          }
|                    d
          }|                    d          }|                    d          }|                    d          }t          dt          |                     |                    d          }|                    d          }|                    d          }|                    d          }|st          ddit          j                  S |st          ddit          j                  S t           j                            |          	                                }|st          ddit          j
                  S t#          j        |j                  }t          dt          |                     |r||z   }t#          j        |j                  }|r||z   }|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                            ||||	|
||||||||          }|r	 t.          j                            |          }n2# t.          j        $ r  t          ddit          j
                  cY S w xY w|                    d          }|                    d          }t2          j                            |||          }|dk    rUd|_        |                                 t8          j                            |j        |dt=          j                    |           }t          dd!i          S # t          $ r4}t          dt          |          it          j                   cY d }~S d }~ww xY w)"Nr   r   r   r   r  r#  completion_timerepetitionsr/  r1  resultsnotesr   next_assessment_dater3  r2  rr  r  exercise is requiredexercise not found
get_images next_assessment_date is requiredzadd atleast one imagezadd atleast one video)r  r#  r  r  r/  r  r  r  r   r3  r   r2  r1  rt  assessment_progresscompleted_time)student
assessmentr  	completedr	   )r   r  attempt_numbercompleted_dater  r   )!r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   r   r   rQ   r$  astliteral_evalr   r3  
Assesmentsr[   rg  r  StudentAssessmenttotal_attemptr\   AssessmentAttemptrb  r   todayr`   )rb   rc   r   rl   re   r0   r  r#  r  r  r/  r1  r  r  r   r  r3  r2  rr  r  r  
get_videosassesment_objr  r  r  student_assessmentattempts                               r6   rm   zAddAssessment.postM  s   _VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW
,4
((6

4hhz""8XX/00?-((;
((6

4HHX6XXi  788G5HHX6$v,,((#9::HHX6((>**<&&:
 YY 23F<WXXXX
 ]Y 67@[\\\\&---::@@BB<
 YY 45f>WXXXX|233:d:&&''' *F|233: *F  iY BCFLghhhh
  \Y 78AZ[[[[
 \Y 78AZ[[[[%,,DLcrgE-V6\ - A A=
  Y##z#22WW  Y Y Yi!45f>WXXXXXXY ((#899XX.//N*299, :  
 k))()% !(//#z||& 0  W Iy)
*
**	 V V V
Is1vv&v/T
U
U
UUUUUUUVs    Q 
A)AAQ AAQ %EQ 9Q AQ )A;Q %Q Q #.Q  M3 2Q 3,N"Q !N""B:Q 
R')RRRNrn   rr   r8   r6   r  r  L  s-        `V `V `V `V `Vr8   r  c                       e Zd Zd Zd ZdS )EditAssessmentc                 |   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j                            d          }|st          ddit          j                  S t          j                            |          }|j        |j        |j        j        |j        j        |j        |j        |j        |j        |j        |j        |j        |j        |j        |j        rA|j                            d                              dd	                              d
          ng |j        rA|j                            d                              dd	                              d
          ng d}t          d|d          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   assessment_idassessment_id is requiredz[]'r  z, )r   r  r#  r  r  r  r  r/  r1  r  r  r  r2  r   r3  r   r   ) r   r_   r   ra   r   r   rT   rU   rV   rW   r   GETrP   rQ   r  r   r  r#  r  r  r/  r1  r  r  r  r2  r   stripreplacesplitr3  r`   rb   rc   r   rl   re   r  assessment_objr   s           r6   rP   zEditAssessment.get  sY   $VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW;???33=
 bY ;<VE`aaaa&**m*<<> 
	&+ ),$4$4 ,"$ )>!.O]Odl^"((..66sB??EEdKKKjlO]Odl^"((..66sB??EEdKKKjl 8" y(;;
<
<<	 V V V
Is1vv&v/T
U
U
UUUUUUUVsQ    G= 
A)AAG= AAG= %8G= DG= =
H;)H60H;6H;c                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j                            d          }|st          ddit          j                  S |j                            d          }|j                            d          }|j                            d	          }|st          dd
it          j                  S |j                            d          }	|	st          ddit          j                  S t          j                            |	          }
|
st          ddit          j
                  S |j                            d          }|j                            d          }|j                            d          }|j                            d          }|j                            d          }|j                            d          }|st          ddit          j                  S |j                            d          }|j                            d          }t          j                            |                              ||
||||||||||           t          ddi          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   r  r  r  r2  r1  r  r#  r  r  r  r  r/  r  r  r  r  r   r3  )r  r#  r  r  r  r  r  r   r3  r   r2  r1  r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   r$  r  r   r`   )rb   rc   r   rl   re   r  r  r2  r1  r#  r  r  r  r/  r  r  r  r   r3  s                      r6   rm   zEditAssessment.post  sg   7VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW<##O44=
 bY ;<VE`aaaa
,

6
"
"4,"">22<LX&&6
 YY 23F<WXXXXlz**8
 ]Y 67@[\\\\&**h*77<
 YY 45f>WXXXX\%%&788? !!-00; ,

6
"
"4 \i((7 <G$$5 ",**+ABB
 iY BCFLghhhhLX&&6 LX&&6 0077t|'K';6K\ 8 Q Q Q Iy)
*
**	 V V V
Is1vv&v/T
U
U
UUUUUUUVsk    L 
A)AAL AAL %8L A,L 8L >L B:L >BL 
M )L;5M ;M Nr  rr   r8   r6   r  r    s;        %V %V %VP8V 8V 8V 8V 8Vr8   r  c                       e Zd Zd ZdS )DeleteAssessmentc                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j                            d          }|st          ddit          j                  S t          j                            ||          	                                }|st          ddit          j
                  S t          j                            |	          	                                }|rt          dd
it          j
                  S |                                 t          ddi          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   r  r  )r   r   zNo assessment foundr  zLYou cannot delete this assessment as it is already assigned to some student.r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   r  r  r  r`   )rb   rc   r   rl   re   r  r  check_assessments           r6   rm   zDeleteAssessment.post  s   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW<##O44=
 bY ;<VE`aaaa&---WW]]__>
 ZY 56v?XYYYY'/66~6VV\\^^ Y nox~  yR  S  S  S  S 
Iy)
*
**	 V V V
Is1vv&v/T
U
U
UUUUUUUVs^    F& 
A)AAF& AAF& %8F& AF& 0AF& $F& &
G$0)GG$G$Nrn   rr   r8   r6   r  r    r  r8   r  c                       e Zd Zd ZdS )AllAssessmentListc                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S t          j                            |                              d          }|st          ddit          j
                  S t          |d	          j        }t          |           t          d
|d          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   rG  r   zNo data foundTr   r   r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r  r   GetIdAssessmentSerializerr0   r   r`   )rb   rc   r   rl   re   r  assessment_serializers          r6   rP   zAllAssessmentList.get9  s   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW &---DDMMeTT>
 TY09RSSSS4^NNNS	
y2GHH
I
II	 V V V
Is1vv&v/T
U
U
UUUUUUUVsQ    D. 
A)AAD. AAD. %AD. 76D. .
E,8)E'!E,'E,Nr   rr   r8   r6   r  r  8  (        V V V V Vr8   r  c                       e Zd Zd ZdS )AssessmentDetailsc                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j                            d          }|st          ddit          j                  S t          j                            |          }t          |          j        }t          d|d          S # t          $ r4}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   ra   r   r   rT   rU   rV   rW   r   r  rP   rQ   r  r  r0   r`   r  s           r6   rP   zAssessmentDetails.getR  s   !VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW;???33=
 bY ;<VE`aaaa&**m*<<>'77<8 y(;;
<
<<	 V V V
Is1vv&v/T
U
U
UUUUUUUVsQ    D$ 
A)AAD$ AAD$ %8D$ AD$ $
E".)EE"E"Nr   rr   r8   r6   r  r  Q  (        "V "V "V "V "Vr8   r  c                       e Zd Zd ZdS )AssignAssessmentc           	         	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|                    d          }|st          ddit          j                  S |st          ddit          j                  S 	 t          j                            |          }n2# t          j        $ r  t          dd	it          j
                  cY S w xY w	 t           j                            |          }	n2# t           j        $ r  t          dd
it          j
                  cY S w xY wt"          j                            |	|          }
|
rt          ddit          j                  S t"          j                            |	|          }|	j        j        rT|	j        j        }|	j        j        dk    rt/          |dddddd           |	j        j        dk    rt/          |dd           t          ddi          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   r  rr  r  rs  Assessment not foundrt  )r  r  z&assessment already assigned to studentr  zASSIGN ASSESSMENTz$A new assessment is assigned to you.1234)r*   r+   r  )r0   r  r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   r  r  rg  r  r[   rb  r  rB   r}   r7   r`   )rb   rc   r   rl   re   r0   r  rr  r  r  get_student_assessmentr  r4   s                r6   rm   zAssignAssessment.postx  sU   :VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW
,488O,,=&&:
 bY ;<VE`aaaa
 _Y 89&B]^^^^[#''='99JJ

! [ [ [Y 67@YZZZZZZ[X""j"11GG

 X X XY 34V=VWWWWWWX .5<< =    oY HIRXRmnnnn)188 9  
 * 
l&0O#y00,(2Xkqrr	    #u,,O/BDjkkk Iy)
*
**	 V V V
Is1vv&v/T
U
U
UUUUUUUVs    J 
A)AAJ AAJ %AJ 5J  D6 5J 6,E%"J $E%%J ) F
 	J 
,F96J 8F99AJ <BJ 
K)KKKNrn   rr   r8   r6   r  r  w  s(        ;V ;V ;V ;V ;Vr8   r  c                       e Zd Zd ZdS )DeleteAssignAssessmentc                 
   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|st          ddit          j                  S t          j                            |          	                                }|st          ddit          j
                  S |j        j        j        r]|j        j        j        }|j        j        j        dk    rt)          |d	d
           |j        j        j        dk    rt)          |d	d
           |                                 t          ddi          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   r  r  zAssigned assessment not found r  zDeleted ASSESSMENTz)The assigned assessment has been deleted.r  zAssessment deleted successfully)r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   r  r  rb  r  rB   r}   r7   r  r`   )	rb   rc   r   rl   re   r0   r  r  r4   s	            r6   rm   zDeleteAssignAssessment.post  s8   2VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW
,488O,,=
 bY ;<VE`aaaa *188 9  
UWW   eY @A&Jcdddd )= p'/8BO!*6)CCO-ACnooo!*6%??O-ACnooo
 I@A
B
BB	 V V V
Is1vv&v/T
U
U
UUUUUUUVsX    G 
A)AAG AAG %:G  AG 1BG 
H)G=7H=HNrn   rr   r8   r6   r$  r$    s(        3V 3V 3V 3V 3Vr8   r$  c                       e Zd Zd ZdS )StudentAssignedAssessmentsc                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|st          ddit          j                  S 	 t          j                            |          }n2# t          j        $ r  t          ddit          j
                  cY S w xY wt           j                            |                              d	          }t%          |d
          j        }	t          d|	d          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   rr  rs  rt  )r  r   Tr   r   r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r  rP   rQ   rg  r  r  r    GetIdStudentAssessmentSerializerr0   r`   )
rb   rc   r   rl   re   r0   rr  r  r  rn  s
             r6   rP   zStudentAssignedAssessments.get  s   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW

4&&:
 _Y 89&B]^^^^X""j"11GG

 X X XY 34V=VWWWWWWX *188 9  Xe__  99KQUVVV[
y0BCC
D
DD	 V V V
Is1vv&v/T
U
U
UUUUUUUVso    F 
A)AAF AAF %:F ! D F ,D1.F 0D11AF 
G)GGGNr   rr   r8   r6   r'  r'    r   r8   r'  c                       e Zd Zd ZdS )StudentAssignedAssessmentDetailc                 0   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|st          ddit          j                  S t          j                            |          	                                }|st          ddit          j
                  S t          |          j        }t          d|d	          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)
Nr   r   r   r   student_assessment_id!student_assessment_id is requiredStudentAssessment not foundr   r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r  rP   rQ   r  r)  r0   r`   )	rb   rc   r   rl   re   r0   r-  r  rn  s	            r6   rP   z#StudentAssignedAssessmentDetail.get  s   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW

488$;<<
 jY CDVMhiiii *188 9  
UWW   bY =>vG`aaaa89KLLQ
y0BCC
D
DD	 V V V
Is1vv&v/T
U
U
UUUUUUUVru  Nr   rr   r8   r6   r+  r+    rB  r8   r+  c                       e Zd Zd ZdS )ChangeAssessmentProgressc                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|                    d          }|                    d          }|                    d          }	|                    d	          }
|                    d
          }|st          ddit          j                  S 	 t          j                            |          }n2# t          j        $ r  t          ddit          j
                  cY S w xY w||_        |                                 t$          j                            |                              d          	                                }|r|r
|j        dz   nd}nd}ddlm} |rt,          j                            |j                  }|j        }t          |          }t          |          } |j        |d          } |j        |d          }||z
  }|j        dz  |j        z   }|j        dz  |j        dz  z   |j        z   }||z  }|dz  }|dk    rd}n|dk     rd}nt,          j                            |j                  }t?          |
          }t?          |	          }t?          |j                   }t?          |j!                  }||z  |z   }||z  }||z  dz  }|dk    rd}n|dk     rd}t$          j        "                    |j#        j$        |||
|	||tK          j&                    |	  	        } t          ddi          S # t          $ r4}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/  r1  r.  r/  r  z-attempt_numberr	   r   )r   z%H:%M:%SiQ   <   d   )	r   r  r  r/  r  r1  r  r  complete_percentr   )(r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   r  r  r  r\   r  r   r  r   r  r  r  strptimedayssecondshourminutesecondintr/  r  r[   r  rb  r   r  r`   )!rb   rc   r   rl   re   r0   r-  r  r  r  r/  r1  r  last_attemptnext_attempt_numberr   r  
total_timecompleted_time_strtotal_time_strcompleted_time_newtime_differencetotal_seconds_differencetotal_seconds_total_timefraction_completionpercentage_completedcompleted_setscompleted_repstotal_sets_plannedreps_per_set_plannedtotal_reps_completedtotal_reps_plannedr   s!                                    r6   rm   zChangeAssessmentProgress.post1  s   QVN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW
,488$;<<"788HH-..>-((;
((6

4HHX6   jY CDVMhiiiib*266:O6PP

( b b bY =>vG`aaaaaab -@) $+22AV2WW``arssyy{{< =IP,599q       '++1C1Q+RRN/J^,,__N**+=zJJ"">:>>J #55O / 4u <@WW *$ 6:;Lr;QRU_Uff25MM.4c!!		!	!  '++1C1Q+RRNYYN%%N^011~9::*-AA^S+.BB03EELc!!		!	!&--3E3M3V!2E46$djllUi . l l7 Iy)
*
**	 V V V
Is1vv&v/T
U
U
UUUUUUUVsp    N9 
A)AAN9 AAN9 %B#N9 
 E+ *N9 +,FN9 FHN9 9
O7)O2,O72O7Nrn   rr   r8   r6   r1  r1  0  s-        RV RV RV RV RVr8   r1  c                       e Zd Zd ZdS )WorkoutPlanCreatec                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|                    d          }	|                    d          }
|                    d          }|                    d	          }|                    d
          }|                    d          }|                    d          }|                    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 |dk    r8t          d           t          j                            |||	|
|||||	  	        }n7t          d           t          j                            |||	|
|||||	  	        }t#          |          j        }t          d|d          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   r  goalr   r  r   duration_typeduration_minutesduration_weekswork_accessr  r  zduration_type is requiredzwork_access is requiredweekhere)	r   r  rR  r   r  r   rU  rS  rV  z	here else)	r   r  rR  r   r  r   rT  rS  rV  r   r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   r   WorkoutPlanr[   WorkoutPlanSerializerr`   )rb   rc   argskwargsr   rl   re   r0   r  rR  r   r  r   rS  rT  rU  rV  workout_planworkout_plan_serializers                      r6   rm   zWorkoutPlanCreate.post  s   1VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW<4
((6

4
((6

4-((;88G588G588O,,=hh122HH-..>-((;
 YY 23F<WXXXX
 `Y 9:6C^____  bY ;<VE`aaaa
 `Y 9:6C^____ v	&MMM&--ktQU5uNan  |G . H HLL 
+&--ktQU5uFVer  @K . L LL 3<@@E
y0GHH
I
II	 V V V
Is1vv&v/T
U
U
UUUUUUUVsd    J  
A)AAJ  AAJ  %C"J  J  'J  J  %BJ   
J>
)J93J>9J>Nrn   rr   r8   r6   rP  rP    s(        2V 2V 2V 2V 2Vr8   rP  c                       e Zd Zd ZdS )WorkoutWeekCreatec                 0   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|                    d          }	|                    d          }
|                    d          }|                    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 t          j                            ||          	                                }|st          ddit          j
                  S t          j                            ||
          	                                }|s!t          j                            ||
          }t"          j                            ||          	                                }|s!t"          j                            ||          }t$          j                            ||	|          }t'          |          j        }t          d|d          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   
workout_id	body_partweek_numberday_nameexercise_dataworkout_id is requiredbody_part is requiredday_name is requiredexercise_data is requiredrZ  Workout Plan not foundplanrd  rW  r  )dayrc  rf  r   r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   rY  WorkoutWeekr[   
WorkoutDayPlanExerciserZ  r`   )rb   rc   r[  r\  r   rl   re   r0   rb  rc  rd  re  rf  r]  workout_weekworkout_dayplan_exerciser^  s                     r6   rm   zWorkoutWeekCreate.post  s7   JVN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW<4&&:xx$$9-((;hhz""8 88O,,=  _Y 89&B]^^^^
 ^Y 78A\]]]]
 ]Y 67@[\\\\  bY ;<VE`aaaa %,,
;,OOUUWW<
 ]Y 89&B[\\\\ %,,,K,XX^^``<
 Z&--<[-YYL #**8*LLRRTT;
 N$++H+MMK  '..;an.oo=2<@@E y0GHH
I
II	 V V V
Is1vv&v/T
U
U
UUUUUUUVsk    K 
A)AAK AAK %BK 4K K 2K AK #C3K 
L!)L
LLNrn   rr   r8   r6   r`  r`    -        KV KV KV KV KVr8   r`  c                       e Zd Zd ZdS )WorkoutWeekDetailc                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|st          ddit          j                  S t          j                            ||          	                                }	|	st          ddit          j
                  S t          |	          j        }
t#          |
           t$          j                            ||		                              d
dd          }t#          |           t)          |          |
d<   t#          |
           t          d|
d          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   rb  rg  rZ  rk  )r   workoutstudent__app_user__full_namestudent__app_user__imagefeedback	feedbacksr   r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r  rP   rQ   rY  rZ  r0   r   CreateStudentFeedbackvalueslistr`   )rb   rc   r[  r\  r   rl   re   r0   rb  r]  r^  r}  s               r6   rP   zWorkoutWeekDetail.get	  s>   !VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW4&&:
 _Y 89&B]^^^^%,,
;,OOUUWW<
 ]Y 89&B[\\\\2<@@E	 !!!!)00\0ZZaa  cA  B\  ]g  h  h8???*.x..;' 		 !!!
y0GHH
I
II	 V V V
Is1vv&v/T
U
U
UUUUUUUVsX    G 
A)AAG AAG %:G  AG 2BG 
H)H HHNr   rr   r8   r6   rx  rx  	  r  r8   rx  c                       e Zd Zd ZdS )GetAllSubExerciseListc                 \   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S t          j                            |          }t          |d          j        }t          d|d	          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)
Nr   r   r   r   )exercise__trainerTr   r   r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r$  r%  r0   r`   )rb   rc   r   rl   re   r&  r'  s          r6   rP   zGetAllSubExerciseList.get6	  sT   VN

 
 CC
 N N NYA'0LMMMMMMMMMN''3'//5577;
 XY 34V=VWWWW!)00;0OO23C$OOOT
i/FGG
H
HH	 V V V
Is1vv&v/T
U
U
UUUUUUUVrL  Nr   rr   r8   r6   r  r  5	  r  r8   r  c                       e Zd Zd ZdS )WorkOutListc                 \   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S t          j                            |          }t          |d          j        }t          d|d	          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wrF  )r   r_   r   ra   r   r   rT   rU   rV   rW   r   rY  WorkoutPlanListSerializerr0   r`   )rb   rc   r   rl   re   workout_plan_objr^  s          r6   rP   zWorkOutList.getG	  sT   VN

 
 CC
 N N NYA'0LMMMMMMMMMN''3'//5577;
 XY 34V=VWWWW!)000EE67GdSSSX
i/FGG
H
HH	 V V V
Is1vv&v/T
U
U
UUUUUUUVrL  Nr   rr   r8   r6   r  r  F	  r  r8   r  c                       e Zd Zd ZdS )WorkoutPlanEditc                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|st          ddit          j                  S t          j                            ||          	                                }	|	st          ddit          j
                  S |j        }|                    d	|	j                  |	_        |                    d
|	j                  |	_        |                    d|	j                  |	_        |                    d|	j                  |	_        |                    d|	j                  |	_        |                    d|	j                  |	_        |                    d|	j                  |	_        |                    d          dk    r(d|	_        |                    d|	j                  |	_        n'|                    d|	j                  |	_        d|	_        |	                                 |	j        |	j        |	j        |	j        |	j        |	j        |	j        |	j        |	j        |	j        |	j        |	j        |	j        |	j        |	j        d}t          d|d          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   workout_plan_idzworkout_plan_id is requiredrZ  rk  r  rR  r   r  r   rV  rS  rW  r   rU  rT  )r   ry  r  rR  r   r  r   rS  rT  rU  rV  likes
created_at
updated_atr   z!Workout Plan updated successfullyr   ) r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   rY  r  rR  r   r  r   rV  rS  rT  rU  r\   r   ry  r  r  r  r   r`   )
rb   rc   r[  r\  r   rl   re   r0   r  r]  s
             r6   rm   zWorkoutPlanEdit.postY	  sF   ?VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW <4XX/00?
 dY =>vGbcccc %,,,UU[[]]<
 ]Y 89&B[\\\\ ,4xx(9::<xx(9::<"hh}l6NOO<,*<==<,*<==<"hh}l6NOO< !%,:T U U<xx  F**$%L!"&((+;\=X"Y"YL$(HH-?A^$_$_L!"#L /)+!/$5"1+()%	 	4" BDQQ
R
RR	 V V V
Is1vv&v/T
U
U
UUUUUUUVsX    L 
A)AAL AAL %:L  AL 2GL 
M)L=7M=MNrn   rr   r8   r6   r  r  X	  s-        @V @V @V @V @Vr8   r  c                       e Zd Zd ZdS )WorkoutWeekEditc                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|                    d          }	|                    d          }
|                    d          }|                    d	          }|                    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 t          j                            ||          	                                }|st          ddit          j
                  S t          j                            |          	                                }|st          ddit          j
                  S t           j                            ||
          \  }}t%          |           t&          j                            ||          \  }}t%          |           t(          j                            |          \  }}t%          d           ||_        t%          d           |	|_        t%          d           |                                 t          d|d          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   rb  rc  rd  re  r  rf  rg  rh  zweek_number is requiredri  rZ  rk  r  rl  rn  )ro  here1here2here3r   r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   rY  r$  rp  get_or_creater   rq  rr  rf  rc  r\   r`   )rb   rc   r[  r\  r   rl   re   r0   rb  rc  rd  re  r  rf  r]  r  rs  createdrt  ru  s                       r6   rm   zWorkoutWeekEdit.post	  s   HVN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW<4&&:xx$$9-((;hhz""8-((;
 88O,,=  _Y 89&B]^^^^
 ^Y 78A\]]]]
 `Y 9:6C^____
 ]Y 67@[\\\\ %,,
K,PPVVXX<
 ]Y 89&B[\\\\&---==CCEE<
 YY 45f>WXXXX '.<<,\g<hh< %,::S[:\\;(0>>;>OO='>>>!.=>>>&=>>> y,??
@
@@	 V V V
Is1vv&v/T
U
U
UUUUUUUVsr    L3 
A)AAL3 AAL3 %B#L3 	L3 (L3 L3 &AL3 8AL3 	C)L3 3
M1=)M,&M1,M1Nrn   rr   r8   r6   r  r  	  s-        IV IV IV IV IVr8   r  c                       e Zd Zd ZdS )PlanExerciseEditc                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|                    d          }	|                    d          }
|                    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 t          j                            ||          	                                }|st          ddit          j
                  S t          j                            |	          }||_        |
|_        |                                 t'          |          j        }t          d|d          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   rb  plan_exercise_idrc  rf  zplan_exercise_id is requiredrh  rj  rZ  rk  r   r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   rY  rr  rf  rc  r\   rZ  r`   )rb   rc   r[  r\  r   rl   re   r0   rb  r  rc  rf  r]  ru  r^  s                  r6   rm   zPlanExerciseEdit.post	  s   )VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW<4&&:hh122xx$$988O,,=  eY >?Hcdddd
 ^Y 78A\]]]]
 bY ;<VE`aaaa %,,
K,PPVVXX<
 ]Y 89&B[\\\\  '++/?+@@=,=&=2<@@E
y2IJJ
K
KK	 V V V
Is1vv&v/T
U
U
UUUUUUUVse    H 
A)AAH AAH %A9H H >H AH /A'H 
I!)I
IINrn   rr   r8   r6   r  r  	  r   r8   r  c                       e Zd Zd ZdS )AssignWorkOutc                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|                    d          }|st          ddit          j                  S |st          ddit          j                  S 	 t          j                            |          }n2# t          j        $ r  t          dd	it          j
                  cY S w xY w	 t           j                            |          }	n2# t           j        $ r  t          dd
it          j
                  cY S w xY wt"          j                            |	|          	                                }
|
rt          ddit          j
                  S t"          j                            |	|          }|	j        j        rg|	j        j        }t          t,          j                  }|	j        j        dk    rt3          |dd           |	j        j        dk    rt3          |dd           t          ddi          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   rb  rr  rg  rs  r   rt  )r  rz  z#workout already assigned to studentr  zASSIGN WORKOUTz!A new workout is assigned to you.r  r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   rY  r  rg  StudentWorkOutPlanr[   rb  r  rB   r   r  r}   r7   r`   )rb   rc   r   rl   re   r0   rb  rr  rz  r  get_workoutcreate_workoutr4   r  s                 r6   rm   zAssignWorkOut.post
  sQ   4VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW
,4&&:&&:
 _Y 89&B]^^^^
 _Y 89&B]^^^^[!%%%44GG

" [ [ [Y 67@YZZZZZZ[X""j"11GG

 X X XY 34V=VWWWWWWX ")00 1   UWW   jY EFvOhiiii$,33 4  > * e&0OX122J#y00O.>@cddd#u,,O.>@cddd
Iy)
*
**	 V V V
Is1vv&v/T
U
U
UUUUUUUVs    J3 
A)AAJ3 AAJ3 %AJ3 5J3  D6 5J3 6,E%"J3 $E%%J3 ) F
 	J3 
,F96J3 8F99AJ3 B$J3 3
K1=)K,&K1,K1Nrn   rr   r8   r6   r  r  
  (        5V 5V 5V 5V 5Vr8   r  c                       e Zd Zd ZdS )DeleteAssignWorkOutc                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }t          j                            |          	                                }|st          ddit          j
                  S |j        j        j        r]|j        j        j        }|j        j        j        dk    rt'          |dd	           |j        j        j        d
k    rt'          |dd	           |                                 t          ddi          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   rb  zNo workout assigned foundr  zDeleted WORKOUTz&The assigned workout has been deleted.r  z%Assigned workout deleted successfully)r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   r  r  rb  r  rB   r}   r7   r  r`   )	rb   rc   r   rl   re   r0   rb  r  r4   s	            r6   rm   zDeleteAssignWorkOut.postO
  s   -VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW
,4&&:$ ")00	 1  
UWW   `Y ;<VE^____"6 j (1;O#/9<<O->@hiii#/588O->@hiii
IFG
H
HH	 V V V
Is1vv&v/T
U
U
UUUUUUUVsR    F% 
A)AAF% AAF% %A,F% BF% %
G#/)GG#G#Nrn   rr   r8   r6   r  r  N
  r  r8   r  c                       e Zd Zd ZdS )CreateConversationwithStudentc                 	   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          |           t          j        	                    |          }t          |           |st          ddit          j
                  S |j        	                    d          }t          |           |st          t          j        d|d          S t          j                            |                                          }|st          t          j        dd	          S t           j                            |j        |j        
                                          }|r+|j        }d|_        |                                 |j        }	nt          |j                  t          |j                  z   t          |j                  z   t          |j                  z   }
t-          |
          }t/          j        |           d                    |          }t4          j        }t4          j        }t;          ||          }|j        j        j                             |          }t           j                             ||
          }|j!        |_        tE          j#                    |_$        |                                 t          |j                  t          |j                  t          |j%                  d}tM          j'        |          }|j        j                            |j!                  j(                             t          |j                  |          }t          |j                  t          |j                  t          |j%                  d}tM          j'        |          }|j        j                            |j!                  j(                             t          |j                  |          }|j!        |_)        |j!        |_*        d|_        |                                 |j        }	|j        }t          t          j+        d||	d          S # t          $ r4}t          dt          |          it          j,                  cY d }~S d }~ww xY w)Nr   r   r   trainer_obj not foundrr  zstudent_id is required.)r  r  r   zNo student foundr  )r  r   Tr  )friendly_name)r   r  r   )identity
attributesrd  )r  r  twilio_channel_sidr  )-r   r_   r   ra   r   r   r   rT   rU   rP   r   r0   rQ   rf  rV   rW   Conversationr   conversation_room_idr  r\   r<   r  rY   shuffler   r   TWILIO_ACCOUNT_SIDTWILIO_AUTH_TOKENr"   conversationsv1r[   sidr   r   last_messager   jsondumpsparticipantsstudent_twilio_idtrainer_twilio_idr  r`   )rb   rc   r   rl   re   rr  rh  existing_conversationr  r  concatinate_namessuffle_stringconversation_nameaccount_sid
auth_tokenclientconversationconversation_objstudent_attributesstudent_json_attributesstudent_participanttrainer_attributes"trainer_attributes_json_attributestrainer_attributes_participants                           r6   rm   z"CreateConversationwithStudent.post
  s   UVL

 
 CC
 L L LYs1vv&f.JKKKKKKKKKL:::$$$,,;  \Y 78AZ[[[[l|,,:
 F$?Slr|}}~~~ '':'66<<>>;
 hF$?Seffggg'/66{~WbWe6ffllnn 7?.C$(!   !)GG;011C8M4N4NNQTU`UcQdQddgjkvkygzgzz*++M
N=!!!..-K+JK,,F'	v-v..  $+22;{2\\,8,<)$,LNN!!+.11[=R9S9S"##  #j);<< .mL$%%fc+.))5LfMM	  "+.11[=R9S9S"##  *.4F)G)G&%+%9mL$%%fc+.))5WfXX	 # *=)@&)G)K&#$G)> 6#5yfx  DK  L  L  M  M  M	 V V V
Is1vv&v/T
U
U
UUUUUUUVsY    R 
A)AAR AAR 1AR 9AR 	L9R 
S)R<6S<SNrn   rr   r8   r6   r  r  
  s-        VV VV VV VV VVr8   r  c                       e Zd Zd ZdS )CreateFavourateSubCategoryc                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddi          S |j
                            d          }|j
                            d          }	 t          j                            |          }n)# t          $ r}t          d| i          cY d }~S d }~ww xY w	 t          j                            ||          }|r|rEd|_        t          j                    |_        |                                 t          d	dd
          S d|_        t          j                    |_        |                                 t          ddd
          S n)#  t          j                            ||d           Y nxY wt          ddi          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r
  discover_subcategory_id
is_deleted)r   discover_sub_categoryTzFavourate Subcategory Deleted)r   deletedFzFavourate Subcategory Created)r   r  r  )r   r_   r   ra   r   r   rf  rU   rV   rW   r  rP   DiscoverSubCategoryFavouriteDiscoverSubCategoryr  r   r   r  r\   r[   r`   )	rb   rc   r   rl   r   r  r  discover_subcategory_objcheck_favourite_subcategorys	            r6   rm   zCreateFavourateSubCategory.post
  s   (XN

 
 CC
 N N NYA'0LMMMMMMMMMN /((C(006688<
 3Y 01222";??+DEEkool++:*08<<@W<XX
 * * *iA())))))))* < D H Hl3 !I !5 !5" T T-1!,-5\^^!,!&&((("A     .3!,-5\^^!,!&&((("AERRSSST (//
3 0     
 I>?
@
@@	 X X XiQ(1VWWWWWWWWWXs    H 
A)AAH AAH 4H  C/ .H /
D9D
DH DH A)G	 AG	 H 	$G/-H 
I)H<6I<INrn   rr   r8   r6   r  r  
  s(        )X )X )X )X )Xr8   r  c                       e Zd Zd ZdS )GetFavouriteSubCategoryc                 L   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }t          j                            |          	                                }|st          ddit          j                  S t          j                            |                              ddd	d
ddddddd                              d          }g }|D ]}|                    d          |d<   |                    d          |d<   |                    d          |d<   |                    d          |d<   |                    d          |d<   |                    d          |d<   |                    |           t          d|d          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   )rb  r
  )r   r   r  r  r  r  $discover_sub_category__main_categorydiscover_sub_category__title"discover_sub_category__descriptiondiscover_sub_category__image!discover_sub_category__start_datediscover_sub_category__end_dater   discover_sub_main_categorydiscover_sub_category_title!discover_sub_category_descriptiondiscover_sub_category_image discover_sub_category_start_datediscover_sub_category_end_dater   )r   r   )r   r_   r   ra   r   r   rf  rU   rV   rW   rg  r   r  r  r   popr   r`   )	rb   rc   r   rl   r   rh  get_favourite_subcategoryr   	favourites	            r6   rP   zGetFavouriteSubCategory.get$  sq   !XP'""cc P P Py#a&&)&2NOOOOOOOOOP O**c*2288::\#**\*BBHHJJ[ Wy"23F<UVVVV #?"F"M"MS_"M"`"`"g"ghn  pG  HT  Ua  bn5,3.1/# # (4..  X/ ! !.7mm<b.c.ci,-/8}}=[/\/\i-.5>]]Cg5h5hi34/8}}=[/\/\i-.4=MMBe4f4fi232;--@a2b2bi01ooi    	X>>??? X X XiQ(1VWWWWWWWWWXsK    G% 
A)AAG% ABG% DG% %
H#/)HH#H#Nr   rr   r8   r6   r  r  #  s(        "X "X "X "X "Xr8   r  c                       e Zd Zd ZdS )CreateTrainerAccessTokenc                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          |           t          j        	                    |          }t          |           |st          ddit          j
                  S |j        }t          t          t          t          |          }t           r*t#          t                     }|                    |           t&          j        j                            t                     j                                                            ddd	
          }||                                d}	t          t          j        d|	d          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r  )r  )service_sidTdefaultz5You have a new message in ${CONVERSATION}: ${MESSAGE})new_message_enablednew_message_soundnew_message_template)r  r/   zToken Created Successfullyr  r  r0   )r   r_   r   ra   r   r   r   rT   rU   rP   r   r   r'   r  api_sid
api_secretchat_service_sidr%   	add_grantr  r  r  servicesconfigurationnotificationsr   to_jwtr  r`   )
rb   rc   r   rl   re   r  r/   
chat_grantr.   r  s
             r6   rm   zCreateTrainerAccessToken.postI  s   &WM!!SS M M MiA'v/KLLLLLLLLLM	#JJJ/%%%--K	+  ]i!89&B[\\\\~HGJIIIE !(8999Z
__Z   'X]__V Q     LLNN G F$6Hdlsttuuu
 W W WYA'0UVVVVVVVVVWsK    F 
A)AAF AAF 1C#F 
G)GGGNrn   rr   r8   r6   r  r  H  s(        'W 'W 'W 'W 'Wr8   r  c                       e Zd Zd ZdS )GetTrainerConversationc                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S t          j                            |          }t          j        }t          j        }t          ||          }g }	|D ]}
|j        j                            |
j                  j                            dd          }d	}d	}d	}|D ]V}|j        r&|j        }t-          |j                  d
z   }|j        }/|j        r d}t-          |j                  d
z   }|j        }W|
j        |
j        |
j        j        |
j        j        |
j        j        |
j        j        |
j        j        |
j        j        ||||
j        d}|	                    |           t          t          j         d|	d          S # t          $ r4}t          dt          |          it          j!                  cY d }~S d }~ww xY w)Nr   r   r   r   rG  descr	   )orderlimitr  r  file)r   r  customer_namecustomer_imagecustomer_idtrainer_nametrainer_imagery  r  timemessage_dater  rd  r  )"r   r_   r   ra   r   r   rT   rU   rV   rW   r   r  r   r  r  r"   r  r  r  r   r  r+   r!   date_createdmediar   r  r<   r   r   r  r   r  r`   )rb   rc   r   rl   re   r  r  r  r  conversation_listr  r   r  r  r	  recordconversation_datas                    r6   rP   zGetTrainerConversation.gett  s   4VL

 
 CC
 L L LYs1vv&f.JKKKKKKKKKL''3'//5577;  UY 01&:STTTT'...EE=,;*:;
++6$ "0 "0|#	}\677t&t""	 
 LDL 	) 	) )[lv*++F2d(ll
, )lv*++F2d(l ?'<"*4#+1'*!)3"*0'*  #  .////
6#5yXijj
k
kk	 V V V
Is1vv&v/T
U
U
UUUUUUUVsK    H 
A)AAH AAH %E9H 
I))IIINr   rr   r8   r6   r  r  s  r  r8   r  c                       e Zd Zd ZdS )GetWorkoutFeedbackc                 p   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j                            d          }|st          ddit          j
                  S t          j                            |          	                                }|st          ddit          j
                  S t          j                            |                              d	d
dd          }t          d|d          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   rb  workout_id not foundzworkout_obj not found)rz  r{  r|  r}  r  r   r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r  rP   rY  r  r  r`   )rb   rc   r   rl   re   rb  workout_objr}  s           r6   rP   zGetWorkoutFeedback.get  s   VN

 
 CC
 N N NYA'0LMMMMMMMMMN''3'//5577;
 XY 34V=VWWWWkool++:
 [Y 67@YZZZZ"))Z)88>>@@;
 \Y 78AZ[[[[#+22;2GGNNOm  oI  JT  Ua  b  b8
ix88
9
99	 V V V
Is1vv&v/T
U
U
UUUUUUUVsX    E7 
A)AAE7 AAE7 %8E7 AE7 /AE7 7
F5)F0*F50F5Nr   rr   r8   r6   r  r    r(  r8   r  c                       e Zd Zd ZdS )SaveTrainerBankDetailsc           
         	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|                    d          }|                    d          }|                    d          }	|                    d	          }
|                    d
          }|                    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 t          j                            ||          }|                                s8t          j                            |||||	|
||           t          ddi          S |                    |||	||
|           t          ddi          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   account_numberrouting_number	bank_nameholder_namer?   r`  account_typezaccount_type is requiredzaccount_number is requiredzrouting_number is requiredzbank_name is requiredzholder_name is requiredzaddress is requiredra  )r   r  )r   r  r  r  r  r?   r`  r  r   )r  r  r  r`  r?   r  zAccount updated successfully)r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   TrainerBankDetailsr   r[   r   r`   )rb   rc   r   rl   re   r0   r  r  r  r  r?   r`  r  check_account_existss                 r6   rm   zSaveTrainerBankDetails.post  s[   @VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW
,4 HH-..>HH-..>xx$$9-((;XXi  7((>**<((>**<
 aY :;FD_````
 cY <=fFabbbb
 cY <=fFabbbb
 ^Y 78A\]]]]
 `Y 9:6C^____
 \Y 56v?Z[[[[
 aY :;FD_```` +299+]k9ll

%
%
'
' A%%"" & 
 
 
 Y	*+++~      Y >?@@@ 
 V V V
Is1vv&v/T
U
U
UUUUUUUVs|    J1 
A)AAJ1 AAJ1 %B8J1 J1 =J1 J1 ;J1 J1 9J1 A,J1 +J1 1
K/;)K*$K/*K/Nrn   rr   r8   r6   r  r    -        AV AV AV AV AVr8   r  c                       e Zd Zd ZdS )GetTrainerBankDetailsc                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S t          j                            |                                          }|                                st          ddi          S t          d|d          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)	Nr   r   r   r   rG  zBack details does not existr   r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r  r  r   r`   )rb   rc   r   rl   re   accounts         r6   rP   zGetTrainerBankDetails.get  so   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW%,,[,AAHHJJ7
..

 :Y =>???y88999	 V V V
Is1vv&v/T
U
U
UUUUUUUVsQ    D 
A)AAD AAD %AD <D 
E)EEENr   rr   r8   r6   r   r     r|  r8   r   c                       e Zd Zd ZdS )GetTrainerWalletc                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S t          j                            |          }|                                st          ddi          S t          d|                                d          S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)	Nr   r   r   r   rG  zget_wallet does not existr   r   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   TrainerWalletr   r  r`   )rb   rc   r   rl   re   
get_wallets         r6   rP   zGetTrainerWallet.get  sr   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW#**;*??:




 FY ;<===y
0A0A0C0CDDEEE	 V V V
Is1vv&v/T
U
U
UUUUUUUVsQ    D 
A)AAD AAD %AD *#D 
E)EEENr   rr   r8   r6   r$  r$    r|  r8   r$  c                       e Zd Zd ZdS )RequestMoneyc                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j        }|                    d          }|st          ddit          j                  S 	 t          j                            ||d           t          dd	it          j                  S # t          $ r}t          d| i          cY d }~S d }~ww xY w# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)
Nr   r   r   r   amountzamount is requiredpending)r   requested_moneyr   zRequestmoney created)r   r_   r   ra   r   r   rT   rU   rV   rW   r   r0   rP   rQ   Requestmoneyr[   r`   )rb   rc   r   rl   re   r0   r+  s          r6   rm   zRequestMoney.post3  s   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW
,4HHX6
 [Y 45f>YZZZZ	)      Y 67@[\\\\
 ) ) )Y1'(((((((() 
 V V V
Is1vv&v/T
U
U
UUUUUUUVst    E	 
A)AAE	 AAE	 %:E	 !>D   
E*E;E<E	 EE	 	
F)F<FFNrn   rr   r8   r6   r)  r)  2  rB  r8   r)  c                       e Zd Zd ZdS )TrainerDashboardc                 D   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S t          j                            |d                                          }t          j                            |d                                          }t          j                            |d                                          }|||d}t          d|it          j                  S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)	Nr   r   r   r   Tr   )total_workoutstotal_assessmentstotal_clientsr0   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   rY  r   r  rg  r  r`   )	rb   rc   r   rl   re   r2  r3  r4  
total_datas	            r6   rP   zTrainerDashboard.getS  s   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW%,,[RV,WW]]__>'..{TX.YY__aa!((d(SSYY[[=#)! : F:'0B
C
C
CC	 V V V
Is1vv&v/T
U
U
UUUUUUUVsK    E! 
A)AAE! AAE! %B;E! !
F+)FFFNr   rr   r8   r6   r0  r0  R  s(        V V V V Vr8   r0  c                       e Zd Zd ZdS )ReadNotificationsc                 *   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S t          j                            d          }t          ddit          j
                  S # t          $ r&}t          |ht          j
                  cY d }~S d }~ww xY w)Nr   r   r   r   T)r  r  )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r  r   )rb   rc   r   rl   re   r.   s         r6   rm   zReadNotifications.postl  s5   ;O!!SS O O OiQ(1MNNNNNNNNNO /((C(006688K Yi!45f>WXXXX$,33D3AALYOF,EFFFF  ; ; ;QC 9:::::::::;sJ    C" 
A)AAC" AAC" %<C" "
D,DDDNrn   rr   r8   r6   r7  r7  k  s#        ; ; ; ; ;r8   r7  c                       e Zd Zd ZdS )Showstudentfeedbackc                 j   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S t          j                            |                                          }t          d|it          j                  S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   rG  r0   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r  r  r  r`   )rb   rc   r   rl   re   r}  s         r6   rP   zShowstudentfeedback.get~  sN   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW!)000EELLNN8
F8%f.@
A
A
AA	 V V V
Is1vv&v/T
U
U
UUUUUUUVsK    C4 
A)AAC4 AAC4 %AC4 4
D2>)D-'D2-D2Nr   rr   r8   r6   r:  r:  }  s(        V V V V Vr8   r:  c                       e Zd Zd ZdS )"Calculateprivateworkoutperformancec                 D   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |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 t          j                            |d          	                                }t          j                            |d          	                                }	t          j                            |	d          	                                }
|st          ddit          j
                  S |	st          ddit          j
                  S t!          j                                                    }|t'          |                                          z
  }|t'          d          z   }t*          j                            ||
|||g                                          }g }|D ]}i }|d         |d<   |d         |d<   |d         |d<   t/          t          |d                                       d                    |d<   	 t3          j        |d                             dd                    }n# t2          j        $ r g }Y nw xY wt;          d |D                       }d}d |D             }|d         |z  }||d<   ||d<   |                    |           t?          |           t          d|it          j                   S # t          $ r4}t          dt          |          it          j!                  cY d }~S d }~ww xY w)Nr   r   r   r   rb  user_idrs  r  user_id not foundworkout_week not foundTr:  rz  r   user with user_id not found!workout with workout_id not foundr8     )r   rz  rs  created_at__date__rangert  "rf  r  c              3      K   | ]E}t          |d                    t          |d                   z  t          |d                   z  V  FdS r1  r0  r/  Nfloatr=  .0exs     r6   	<genexpr>z9Calculateprivateworkoutperformance.get.<locals>.<genexpr>  M      ffVX%8--BvJ?#bj//Qffffffr8   g~jtX?c                     g | ]C}t          |d                    t          |d                   z  t          |d                   z  DS )r1  r0  r/  rK  rM  s     r6   
<listcomp>z:Calculateprivateworkoutperformance.get.<locals>.<listcomp>  sC    gggWY5H..RZ@3r&z??Rgggr8   r   training_volumetotal_calories_countr0   )"r   r_   r   ra   r   r   rT   rU   rV   rW   r   r  rP   rf  rY  r  r#   r   r   r   weekdayWorkoutAttemptr  r=  r  r  loadsr	  JSONDecodeErrorsumr   r   r  r`   )rb   rc   r   rl   re   rb  r?  rs  get_userr  get_student_workoutr  start_of_weekend_of_weekr   complete_dataatt
entry_data	exercisesrT  calories_per_pound_liftedtotal_weight_liftedcalories_burneds                          r6   rP   z&Calculateprivateworkoutperformance.get  s   MVN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWWkool++:;??9%%7//<
 [Y 67@YZZZZ
 XY 34V=VWWWW
 ]Y 89&B[\\\\O""gt"DDJJLL8"))Z)NNTTVV;)188^b8cciikk
 bY =>vG`aaaa
 hY CDVMfgggg<>>  5 9%--//::::= !2!2!22; #**BUco  JW  Yd  Ie*  f  f  m  m  o  o7 =  % %sJ	NJy"<0J| #M 2J}!$S^)<%=%=%C%CC%H%H!I!IJ~C088cBBCCYY   YYY ff\efffffO & hg]fggg *!,/HHO %4J !)8J%& $$$$ 	
F=*63E
F
F
FF	 V V V
Is1vv&v/T
U
U
UUUUUUUVs    O! 
A)AAO! AAO! %A,O! O! 1O! B7O! O! 'C5O! .MO! M O! M  B O! !
P+)PPPNr   rr   r8   r6   r=  r=    s-        NV NV NV NV NVr8   r=  c                       e Zd Zd ZdS )!Calculatepublicworkoutperformancec                    	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j                            d          }|j                            d          }|st          ddit          j
                  S |st          ddit          j
                  S t          j                            |d	
          	                                }t          j                            |d	
          	                                }|st          ddit          j
                  S |st          ddit          j
                  S t          j                                                    }	|	t%          |	                                          z
  }
|
t%          d          z   }t(          j                            |||
|g                                          }g }|D ]}i }|d         |d<   |d         |d<   |d         |d<   	 t-          j        |d                             dd                    }n# t,          j        $ r g }Y nw xY wt5          d |D                       }||d<   |                    |           t9          |           t          d|it          j                  S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w)Nr   r   r   r   rb  r?  r  r@  Tr:  rC  rD  rE  rF  )r   rz  rG  rt  rf  r  rH  c              3      K   | ]E}t          |d                    t          |d                   z  t          |d                   z  V  FdS rJ  rK  rM  s     r6   rP  z8Calculatepublicworkoutperformance.get.<locals>.<genexpr>  rQ  r8   rT  r0   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r  rP   rf  rY  r#   r   r   r   rV  PublicWorkoutAttemptr  r  rX  r	  rY  rZ  r   r   r  r`   )rb   rc   r   rl   re   rb  r?  r[  r  r  r]  r^  r   r_  r`  ra  rb  rT  s                     r6   rP   z%Calculatepublicworkoutperformance.get  s   @VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWWkool++:;??9%%7
 [Y 67@YZZZZ
 XY 34V=VWWWWO""gt"DDJJLL8"))Z)NNTTVV;
 bY =>vG`aaaa
 hY CDVMfgggg<>>  5 9%--//::::= !2!2!22; ")00hmz  }H  mI0  J  J  Q  Q  S  S7 =  % %sJ	NJy"<0J| #M 2J}C088cBBCCYY   YYY ff\efffffO %4J ! $$$$ 	
F=*63E
F
F
FF	 V V V
Is1vv&v/T
U
U
UUUUUUUVs    L 
A)AAL AAL %AL 8L BL L ;B<L 8.J'&L 'J;8L :J;;A"L 
M()MMMNr   rr   r8   r6   rg  rg    r  r8   rg  c                       e Zd Zd ZdS )GetallWeeklyPublicworkoutsc                 ~   	 	 t          |          }nP# t          $ rC}t          |           t          dt	          |          it
          j                  cY d }~S d }~ww xY wt          j        	                    |          
                                }|st          ddit
          j                  S t          j                                                    }t          d           |j                            d          }|st          ddit
          j                  S t"          j        	                    |d	          
                                }|st          dd
it
          j                  S |t%          |                                          z
  }|t%          d          z   }	g }
t(          j        	                    |||	g          }|D ]~}|j        }|                    dd          }t/          j        |          }|
                    |j        |j        j        |j        j        ||j        |j        |j        |j         d           t          d|
it
          j!                  S # t          $ rD}t          d|           t          dt	          |          it
          j"                  cY d }~S d }~ww xY w)Nr   r   r   r   zhere in tryr?  r@  Tr:  rC  rE  rF  )r   rG  r  rH  )r   r?  rb  rf  rs  rt  r  r  r0   z	in except)#r   r_   r   r   ra   r   r   rT   rU   rV   rW   r   r#   r   r   r  rP   rf  r   rV  rj  rf  r	  r  rX  r   r   r   rz  rs  rt  r  r  r  r`   )rb   rc   r   rl   re   r  r?  r[  r]  r^  r   r   r`  rf  exercise_data_lists                  r6   rP   zGetallWeeklyPublicworkouts.get$  s   .VN

 
 CC
 N N N	!HHHYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW<>>  5;??9%%7
 XY 34V=VWWWWO""gt"DDJJLL8  bY =>vG`aaaa9%--//::::= !2!2!22;8!)00hXegrWs0tt7 / /s#M!))#s33MM22OO6;>(%O)+. . / / / / F8%f.@
A
A
AA	 V V VQ
Is1vv&v/T
U
U
UUUUUUUVsY    I. 
A 8AA I. A  AI. 4A,I. !AI. 3C:I. .
J<89J71J<7J<Nr   rr   r8   r6   rl  rl  #  s(        /V /V /V /V /Vr8   rl  c                       e Zd Zd ZdS )GetallWeeklyPrivateworkoutsc                 	   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |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 t          j                            |d          	                                }|st          ddit          j
                  S t          j                            |d          	                                }	t          j                            |	d          	                                }
|	st          ddit          j
                  S t!          j                                                    }|t'          |                                          z
  }|t'          d          z   }d}g }g }t*          j                            |
|||g|          }|D ]}|                    |j        |j        j        |j        j        t5          j        |j                  |j        |j        |j        |j         |j!        d	           |tE          tG          j$        |j                            z  }|j         r/tK          |j                    |                    |j                     tM          d d |D             D                       }t'          |          }|'                                }tQ          |d          \  }}tE          |          }g d|)                    fd           t          dtU          |           dtU          |           ||d|dt          j+                  S # t          $ r4}t          dt          |          it          j,                  cY d }~S d }~ww xY w)Nr   r   r   r   r?  rb  rs  r@  r  rA  Tr:  rC  rB  rD  rE  rF  r   )rz  r   rG  rs  )	r   r?  rb  rf  rs  rt  r  r  r  c              3      K   | ]=\  }}}t          |          d z  t          |          dz  z   t          |          z   V  >dS )r3  r4  N)r=  )rN  hmss       r6   rP  z2GetallWeeklyPrivateworkouts.get.<locals>.<genexpr>  s`        1a FFTMCFFRK#a&&(     r8   c              3   @   K   | ]}|                     d           V  dS ):N)r
  )rN  r  s     r6   rP  z2GetallWeeklyPrivateworkouts.get.<locals>.<genexpr>  s,      <<DJJsOO<<<<<<r8   )r9  r4  )MondayTuesday	WednesdayThursdayFridaySaturdaySundayc                 :                         | d                   S )Nrt  )index)x
week_orders    r6   <lambda>z1GetallWeeklyPrivateworkouts.get.<locals>.<lambda>  s    z//-0@AA r8   )keyrw  rd  )r   workout_minutes
total_dayscompleted_workoutsr   r0   )-r   r_   r   ra   r   r   rT   rU   rV   rW   r   r  rP   rf  rY  r  r#   r   r   r   rV  rW  r   r   r   rz  r  rX  rf  rs  rt  r  r  r  lenr  r  r   rZ  total_secondsdivmodsortr=  r  r`   )rb   rc   r   rl   re   r?  rb  rs  r[  r  r\  r  r]  r^  r  r   time_valuesr   r`  r  r@  minutesremaining_secondsr  r  s                           @r6   rP   zGetallWeeklyPrivateworkouts.getV  s   JVN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW;??9%%7kool++://<
 XY 34V=VWWWW
 [Y 67@YZZZZ
 ]Y 89&B[\\\\O""gt"DDJJLL8
 bY =>vG`aaaa"))Z)NNTTVV;)188^b8cciikk
 hY CDVMfgggg<>>  5 9%--//::::= !2!2!22;8;#**3FHn{  ~I  nJ  Xd*  e  e7 2 2s OO6;>j!233%O)+>     C,S->??@@@
 2
33.0111  <<<<<    =
 -000:++--= &}b 9 97(mm:^^^: ==AAAA=BBB
Ts7||4^4^cJ[F\F\4^4^lv  M_  js  {C  E  E  NT  N`  a  a  a  a	 V V V
Is1vv&v/T
U
U
UUUUUUUVsl    Q 
A)AAQ AAQ &A,Q Q 2Q AQ #BQ (HQ 
R)Q<6R<RNr   rr   r8   r6   rp  rp  U  rv  r8   rp  c                       e Zd Zd ZdS )GetPrivateworkoutdetailc                 ^   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j                            d          }t          j                                                    }|t!          |                                          z
  }|t!          d          z   }t$          j                            |||g                                          }	t          d	|	it          j                  S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY w
Nr   r   r   r   rt  rE  rF  )rt  rG  r0   )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r  rP   r#   r   r   r   rV  rW  r  r  r`   
rb   rc   r   rl   re   rt  r  r]  r^  r   s
             r6   rP   zGetPrivateworkoutdetail.get  s   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW{}--;<>>  5 9%--//::::= !2!2!22;#**{\ikv[w*xx  B  B7
F7$V-?
@
@
@@	 V V V
Is1vv&v/T
U
U
UUUUUUUVK    E. 
A)AAE. AAE. %CE. .
F,8)F'!F,'F,Nr   rr   r8   r6   r  r    r  r8   r  c                       e Zd Zd ZdS )GetPublicworkoutdetailc                 ^   	 	 t          |          }nA# t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wt          j                            |          	                                }|st          ddit          j
                  S |j                            d          }t          j                                                    }|t!          |                                          z
  }|t!          d          z   }t$          j                            |||g                                          }	t          d	|	it          j                  S # t          $ r4}t          dt          |          it          j                  cY d }~S d }~ww xY wr  )r   r_   r   ra   r   r   rT   rU   rV   rW   r   r  rP   r#   r   r   r   rV  rj  r  r  r`   r  s
             r6   rP   zGetPublicworkoutdetail.get  s   VN

 
 CC
 N N NYA'0LMMMMMMMMMN ''3'//5577;
 XY 34V=VWWWW{}--;<>>  59%--//::::=!2!2!22;!)00[boq|a}0~~  F  F  H  H7
F7$V-?
@
@
@@	 V V V
Is1vv&v/T
U
U
UUUUUUUVr  Nr   rr   r8   r6   r  r    s(        V V V V Vr8   r  )N)r=   r   django.shortcutsr   rest_framework.viewsr   rest_framework.responser   rest_frameworkr   modelsr   r   r   django.confr   django.contrib.authr   django.contrib.auth.modelsr   rest_framework_simplejwt.tokensr   passlib.hashr   rR   django.template.loaderr   authenticationr   django.corer   django.core.mailr   mathrY   pytzstringdjango.contribr   jwtdjango.core.files.storager   r   r  django.db.modelsr   pyfcmr   django.views.genericr   admin_panel.modelsr   r   r   user_app.serializersr   r    user_app.modelsserializers	functionsdjango.utils.timesincer!   twilio.restr"   django.utilsr#   r  twilio.jwt.access_token.grantsr$   r%   r&   twilio.jwt.access_tokenr'   firebase_adminr(   r  r  r  r  TWILIO_CHAT_SIDr  TWILIO_SYNC_SIDsync_service_sidTWILIO_API_SIDr  TWILIO_API_SECRETr  r  r7   r:   rt   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r!  r*  r<  r@  rD  rN  rV  r^  rk  rp  rw  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$  r'  r+  r1  rP  r`  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r$  r)  r0  r7  r:  r=  rg  rl  rp  r  r  rr   r8   r6   <module>r     sV         # # # # # # ( ( ( ( ( ( , , , , , , ! ! ! ! ! !     . . . . . . . . . .             , , , , , , + + + + + + 8 8 8 8 8 8 8 8 8 8 8 8 3 3 3 3 3 3 ) ) ) ) ) )       3 3 3 3 3 3 ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! # # # # # # 



 7 7 7 7 7 7 				 



       ! ! ! ! ! ! - - - - - - H H H H H H H H H H A A A A A A A A             , , , , , ,                   ! ! ! ! ! !                
       / / / / / / $ $ $ $ $ $ ('
+ + 

!&
	Z	(	(   :V :V :V :V :Vw :V :V :Vx*V *V *V *V *VG *V *V *VX-V -V -V -V -V' -V -V -V` T  T  T  T  Tg  T  T  TD.V .V .V .V .VW .V .V .V`T T T T TG T T T08T 8T 8T 8T 8T 8T 8T 8Tv!U !U !U !U !UW !U !U !UHT T T T T T T T&T T T T T T T T6T T T T T T T T +V +V +V +V +V' +V +V +VZV V V V V7 V V V< V  V  V  V  V'  V  V  VDV V V V VG V V V&T T T T TG T T TT T T T Tg T T TT T T T Tg T T TV V V V Vg V V V&"V "V "V "V "V' "V "V "VH9V 9V 9V 9V 9V7 9V 9V 9VxV V V V VW V V VDV V V V V V V V0HV HV HV HV HVW HV HV HVTYV YV YV YV YVg YV YV YVvV V V V V V V VBV V V V VG V V V&"V "V "V "V "V "V "V "VH9V 9V 9V 9V 9V 9V 9V 9Vx9T 9T 9T 9T 9T 9T 9T 9TzC C C C CW C C C&V V V V Vw V V V@V V V V Vw V V V."V "V "V "V "V' "V "V "VJV V V V V' V V V8O O O O Og O O O4O O O O O O O O*O O O O O7 O O O&-U -U -U -U -U -U -U -Ub/V /V /V /V /V' /V /V /VdV V V V Vw V V V"V V V V V7 V V V$V V V V V V V V8V V V V V7 V V V0V V V V V V V V<aV aV aV aV aVG aV aV aVJaV aV aV aV aVW aV aV aVJV V V V Vw V V VDV V V V V V V V2#V #V #V #V #V #V #V #VL<V <V <V <V <Vw <V <V <V|4V 4V 4V 4V 4VW 4V 4V 4Vn V  V  V  V  V  V  V  VFV V V V Vg V V VBSV SV SV SV SVw SV SV SVn3V 3V 3V 3V 3V 3V 3V 3VnLV LV LV LV LV LV LV LVb#V #V #V #V #V #V #V #VLV V V V VG V V V"V V V V V' V V V$AV AV AV AV AVg AV AV AVHJV JV JV JV JVg JV JV JVZ+V +V +V +V +Vw +V +V +VZ6V 6V 6V 6V 6VG 6V 6V 6Vp/V /V /V /V /V' /V /V /VdWV WV WV WV WVG WV WV WVl*X *X *X *X *X *X *X *XZ#X #X #X #X #Xg #X #X #XJ(W (W (W (W (Ww (W (W (WV6V 6V 6V 6V 6VW 6V 6V 6VpV V V V V V V V0BV BV BV BV BVW BV BV BVHV V V V VG V V V,V V V V Vw V V V*V V V V V7 V V V@V V V V Vw V V V2; ; ; ; ; ; ; ;$V V V V V' V V V"OV OV OV OV OV OV OV OVbBV BV BV BV BV BV BV BVH0V 0V 0V 0V 0V 0V 0V 0VdLV LV LV LV LV' LV LV LVXV V V V Vg V V V0V V V V VW V V V V Vr8   