
    Phf                       d dl mZ d dlmZ d dlmZ d dlmZ d dl d dl	 d dl
 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 d dlmZ d d
lZd dlmZ d dlmZmZmZ d dl m!Z! d dl"m#Z# d dl$m%Z% d dl&m'Z' ejP                  Z)ejT                  Z+ejX                  Z-ej\                  Z/ej`                  Z1ejd                  Z3 e!e)e+      Z4dYdZ5 G d de      Z6 G d de      Z7d dl mZ d dlmZ d dlmZ d dlmZ ddl8m9Z9  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 d" d#e      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mAZAmBZBmCZCmDZDmEZE d& ZF G d' d(e      ZG G d) d*e      ZH G d+ d,e      ZIddlJ  G d- d.e      ZK G d/ d0e      ZL G d1 d2e      ZMd dl mZ d dlmZ d dlmZ d dlmZ d d
lZd d3lNmOZO d dl mZ d dlmZ d dlmZ d dlmZ d d
lZ G d4 d5e      ZP G d6 d7e      ZQ G d8 d9e      ZR G d: d;e      ZSd d
lTZT G d< d=e      ZUd d
lVZV G d> d?e      ZW G d@ dAe      ZX G dB dCe      ZY G dD dEe      ZZd dFl[m\Z\ d dGl]m^Z^  G dH dIe\      Z_ G dJ dKe\      Z`dZdLZa G dM dNe      Zb G dO dPe      Zcd d
ldZd G dQ dRe      Ze G dS dTe      Zf G dU dVe      Zg G dW dXe      Zhy
)[    )APIView)Responsestatus)settings)*)RefreshToken)django_pbkdf2_sha256)render_to_string)mailN)Q)	SyncGrant	ChatGrant
VideoGrant)Client)AccessToken)	timesince)	messagingc                     i }|t        |      |d<   |t        |      |d<   |t        |      |d<   t        j                  t        j                  ||      | |r|nd       }t        j                  |      }|S )N
booking_idand_message	and_title)titlebody)notificationtokendata)strr   MessageNotificationsend)	registration_idr   r   r   r   r   message_datamessageresponses	            7/var/www/html/Kila-kolis-project/Kolis/userapi/views.pysend_push_notificationr'   .   s    ":,| #K 0,}!)n,{ %%	 	#| NN7#    c                       e Zd Zd Zy)Registerc                    |j                   }|j                  j                  dd      d d }|j                  d      }|j                  d      }|r|j                         }|j                  d      }|j                  d      }|j                  dd	      }|j	                         }	|	j                  d
      sd
|	 }	|j                  d      }
|j                  d      }|j                  d      }|j                  d      }|r|r|s2t        ddd|   t        j                  dt        j                        S t        j                  j                  |d      j                         r2t        ddd|   t        j                  dt        j                        S t        j                  j                  |	|d      j                         r2t        ddd|   t        j                  dt        j                        S t        j                  |      }t        j                  j                  |d      j!                         }|r2t        ddd|   t        j                  dt        j                        S t#               }t%        j&                  ddd      }t        j                  j)                  |||||	||
||d||      }d d!d|   }t+        d"d#|i      }t-        j.                  ||t0        j2                  |g|$       t4        j                  j)                  | d%| d&d|   '       t        d(d)d|   t        j6                  dt        j6                        S )*NAccept-Languageen   	full_nameemailpasswordphoneNumbercountryCode +countrycountry_name_code	fcm_tokendevice_typez%All required fields must be provided.u-   Tous les champs requis doivent être remplis.r-   frr$   
statusCoder   Tr0   end_date__isnullz!This email is already registered.u"   Cet e-mail est déjà enregistré.)country_codephone_numberr?   z(This phone number is already registered.u1   Ce numéro de téléphone est déjà enregistré.  '     pending)r/   r0   r1   otpr@   rA   r6   r7   user_stripe_iddocument_statusr8   r9   Verify Accountu   Vérifier le compteregister_verification.htmlrF   html_messagez" has been successfully registered.u"    a été enregistré avec succès.r$   z@You have been successfully registered. Please verify your email.uN   Vous vous êtes inscrit avec succès. Veuillez vérifier votre adresse e-mail.)r   headersgetlowerstrip
startswithr   r   HTTP_400_BAD_REQUESTAppUserobjectsfilterexistsHTTP_409_CONFLICThandlerhashfirstgenerate_strip_idrandom	randrangecreater   r   	send_mailr   EMAIL_HOST_USERAdminNotificationsHTTP_200_OK)selfrequestr   langr/   r0   r1   r2   countryCode_rawr3   r6   r7   r8   r9   new_passwordapp_user_objrG   the_otpsubjectrL   s                       r&   postzRegister.postJ   s|   ||""#4d;BQ?HH[)	!KKME88J'hh}-((="5%++-%%c*k]+K((9% HH%89HH[)	hh}- IXAI  %99 113 3 ??!!!ELLN=>  %66 ..0 0 ??!!{gk!lssuDM  %66 ..0 0 ||H- --ED-QWWY=>  %66 ..0 0 +,""4q1--!$$/)%# . 
  #'
 
 ((DugFVWwh.F.F^jk""))KABKAB3
 3) 	
 Xf  !,,
 $$& 	&r(   N__name__
__module____qualname__rl    r(   r&   r*   r*   I   s    c&r(   r*   c                       e Zd Zd Zy)SocialLoginc                    	 |j                   j                  dd      d d }|j                  }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d	      }	|r|s2t        d
dd|   t        j
                  dt        j
                        S |s2t        ddd|   t        j
                  dt        j
                        S |s2t        ddd|   t        j
                  dt        j
                        S |s2t        ddd|   t        j
                  dt        j
                        S |s2t        ddd|   t        j
                  dt        j
                        S |	s2t        ddd|   t        j
                  dt        j
                        S t        j                  j                  |d      j                         }
|
s%t        j                  j                  ||||||	      }
t        j                  |
      }|
j                  |
j                  |
j                  |
j                   t#        |      t#        |j$                        d}t        ddd|   |t        j&                  dt        j&                        S # t(        $ r?}t        t#        |      t        j*                  dt        j*                        cY d }~S d }~ww xY w) Nr,   r-   r.   provider_idr0   r/   	social_idr9   r8   z$Provider and social_id are required.u5   Le fournisseur et l’identifiant social sont requis.r:   r<   r   zFull name is required.zLe nom complet est requis.zEmail address is required.u   L’adresse e-mail est requise.zSocial ID is required.u"   L’identifiant social est requis.zDevice type is required.u    Le type d’appareil est requis.zFCM token is required.zLe jeton FCM est requis.T)rv   r?   )r/   rv   ru   r0   r9   r8   idr/   r0   is_profile_completedrefreshaccessSuccess   Succèsr$   all_datar=   )rN   rO   r   r   r   rS   rT   rU   rV   r[   r_   r	   for_userrx   r/   r0   ry   r   access_tokenrc   	ExceptionHTTP_500_INTERNAL_SERVER_ERROR)rd   re   rf   r   ru   r0   r/   rv   r9   r8   ri   refresh_tokenallDataes                 r&   rl   zSocialLogin.post   s6   f	=??&&'8$?CD<<D((=1KHHW%E-I-I((=1K-IiDU    #)"="=! !557 7 6:    #)"="=! !557 7 :?    #)"="=! !557 7 6B    #)"="=! !557 7 8@    #)"="=! !557 7 68    #)"="=! !557 7 #??11IX\1]cceL&55'' + +'  6   )11,?M #oo)33%++(4(I(I}-m889G ##  $$00 ((* *  	=q6$CC ;;= =	=sC   CJ8 	3J8 =3J8 13J8 %3J8 3J8 C*J8 8	L 4K;5L ;L Nrm   rq   r(   r&   rs   rs      s    g=r(   rs      )rT   c                       e Zd Zd Zy)OtpVerificationc                 4   	 |j                   j                  dd      d d }|j                  }|j                  d      }|j                  d      }|s2t        ddd|   t        j
                  d	t        j
                  
      S |s2t        ddd|   t        j
                  d	t        j
                  
      S 	 t        j                  j                  ||d      }d|_	        d|_
        |j                          t        j                  |      }|j                  |j                  |j                   |j"                  t%        |      t%        |j&                        d}t        ddd|   |t        j(                  dt        j(                  
      S # t        $ r6 t        ddd|   i t        j
                  dt        j
                  
      cY S w xY w# t        $ r?}	t        t%        |	      t        j*                  d	t        j*                  
      cY d }	~	S d }	~	ww xY w)Nr,   r-   r.   r0   rF   zEmail is required.zL'e-mail est requis.r:   r<   r   zOTP code is required.zLe code OTP est requis.Tr0   rF   r?   zInvalid OTP code.zCode OTP invalide.r~   rw   r|   r}   )rN   rO   r   r   r   rS   rT   rU   r   email_verifiedis_verifiedsaver	   r   rx   r/   r0   ry   r   r   rc   r   )
rd   re   rf   r   r0   rF   ri   r   r   r   s
             r&   rl   zOtpVerification.post&  s.   A	=??&&'8$?CD<<DHHW%E((5/C24    #)"="=! !557 7 57    #)"="=! !557 7
7&22CZ^2_ +/L''+L$(11,?M #oo)33%++(4(I(I}-m889G ##  $$00 ((* *3  712    !#"("="=! !557 77D  	=q6$CC ;;= =	=sI   B G 3G 8"F B2G <G	G GG 	H4HHHNrm   rq   r(   r&   r   r   %  s    B=r(   r   c                       e Zd Zd Zy)registerResendOTPc                    	 |j                   j                  dd      d d }|j                  }|j                  d      }|r|j                         }t        j
                  j                  |d      j                         }|s2t        ddd	|   t        j                  d
t        j                        S t        j                  ddd      }||_        |j                          ddd	|   }t        dd|i      }|}	t         j"                  }
|}	 t%        j&                  ||	|
|g|       t        ddd	|   t        j,                  d
t        j,                        S # t(        $ r5 t        ddd	|   t        j*                  d
t        j*                        cY S w xY w# t(        $ r?}t        t/        |      t        j*                  d
t        j*                        cY d }~S d }~ww xY w)Nr,   r-   r.   r0   Tr>   z*This email does not exist in the database.u1   Cet e-mail n'existe pas dans la base de données.r:   r<   r   rB   rC   rD   zVerify your account   Vérifiez votre compterJ   rF   rK   zYWe encountered a problem sending the verification email. Please contact support for help.u   Nous avons rencontré un problème lors de l’envoi de l’e-mail de vérification. Veuillez contacter le support pour obtenir de l’aide.z7OTP sent successfully. Please check your email address.uB   OTP envoyé avec succès. Veuillez vérifier votre adresse e-mail.)rN   rO   r   rP   rT   rU   rV   r[   r   r   rX   r]   r^   rF   r   r   r   ra   r   r`   r   r   rc   r   )rd   re   rf   r   r0   ri   rj   rk   rL   plain_message
from_emailtor   s                r&   rl   zregisterResendOTP.postl  s   8	=??&&'8$?CD<<DHHW%E #??11PT1U[[]LJQ    #)":":! !224 4 &&tT15G&L ,. G
 ,,H5RYJZ[L(M!11JB	AwzB4Vbc S^  %00 ((* *  Ay m    #)"G"G! !??A AA"  	=q6$CC ;;= =	=sI   B0F 3AF E '1F ;FF FF 	G"#4GG"G"Nrm   rq   r(   r&   r   r   k  s    9=r(   r   c                       e Zd Zd Zy)	LoginUserc                 V   	 |j                   j                  dd      d d }|j                  }|j                  d      }|r|j                         nd}|j                  d      }|j                  d      }|j                  d      }|s2t	        d	d
d|   t
        j                  dt
        j                        S |s2t	        ddd|   t
        j                  dt
        j                        S t        j                  j                  |d      j                         }|dk(  r2t	        ddd|   t
        j                  dt
        j                        S t        j                  j                  |dd      j                         }	|	s2t	        ddd|   t
        j                  dt
        j                        S |	j                  }
t        j                  ||
      }|r|	j                   st#        j$                  ddd      }||	_        ||	_        ||	_        |	j-                          ddd|   }t/        dd|i      }|}t0        j2                  }|}	 t5        j6                  ||||g|       ||	_        |	j-                          t	        d"d#d|   t
        j<                  dt
        j<                        S ||	_        ||	_        |	j-                          t?        j@                  |	      }|	jB                  |	jD                  |	jF                  |	jH                  tK        |      tK        |jL                        d$}t	        d%d&d|   |t
        j<                  d't
        j<                        S t	        d(d)d|   t
        j                  dt
        j                        S # t8        $ r<}t	        d d!d|   t
        j:                  dt
        j:                        cY d }~S d }~ww xY w# t8        $ r?}t	        tK        |      t
        j:                  dt
        j:                        cY d }~S d }~ww xY w)*Nr,   r-   r.   r0   r4   r1   r8   r9   zEmail address is requiredL'adresse e-mail est requiser:   r<   r   zPassword is requiredzLe mot de passe est requisTr>   r   z:This email does not exist in our database, please registeruK   Cet e-mail n'existe pas dans notre base de données, veuillez vous inscrire)r0   r   r?   z7Your account has been deactivated by the administrator.u8   Votre compte a été désactivé par l’administrateur.rB   rC   rD   rI   r   rJ   rF   rK   z:Failed to send verification email. Please try again later.R   Échec de l’envoi de l’e-mail de vérification. Veuillez réessayer plus tard.zcYour email address is not verified. We have sent the verification code to your email, please check.u   Votre adresse e-mail n’est pas vérifiée. Nous avons envoyé le code de vérification sur votre e-mail, veuillez le vérifier.rw   zLogin successfulu   Connexion réussier~   zInvalid login credentialsz#Identifiants de connexion invalides)'rN   rO   r   rP   r   r   rS   rT   rU   rV   countHTTP_404_NOT_FOUNDr[   r1   rY   verifyr   r]   r^   rF   r8   r9   r   r   r   ra   r   r`   r   r   rc   r	   r   rx   r/   r0   ry   r   r   )rd   re   rf   r   r0   r1   r8   r9   
user_countri   check_passwordcheckrj   rk   rL   r   r   r   email_errorr   r   r   s                         r&   rl   zLoginUser.post  sc   y	=??&&'8$?CD<<DHHW%E%*EKKMExx
+H-I((=1K9<    #)"="=! !557 7 4:    #)"="=! !557 7 !//ed/SYY[JQZk    #)";";! !335 5 #??11d]a1bhhjLWX    #)";";! !335 5 *22NNN8^<E#22$..tT1=G'.L$-6L*/:L, %%' /6 G $44PSXZaRb#cL$0M!)!9!9JBIwzB4^jk+2($))+ $ #H #f$ $  '-&8&8% %002 2 .7L*/:L, %%'$0$9$9,$GM*oo%1%;%;!-!3!30<0Q0Q#&}#5"%m&@&@"AG $"4"6$ $  %,&,&8&8% %002 2  9C    #)"="=! !557 7M % I'&b&z( #($ +1*O*O) #)"G"G I II\  	=q6$CC ;;= =	=sv   B6O  93O  -A%O  A#O  7BO  2N 1O  3B2O  &1O  	O!1OOO  OO   	P()4P#P(#P(Nrm   rq   r(   r&   r   r     s    z=r(   r   c                       e Zd Zd Zy)ForgetPasswordc                 L   	 |j                   j                  dd      j                         }|j                  }|j                  d      }|s3t	        |dk(  rdndt
        j                  dt
        j                        S t        j                  j                  |d	
      j                         }|dk(  r3t	        |dk(  rdndt
        j                  dt
        j                        S t        j                  j                  |d	
      j                         }|rt        j                  ddd      }||_        |j!                          |dk(  rdnd}t#        dd|i      }	|	}
t$        j&                  }|}	 t)        j*                  ||
||g|	       ||_        |j!                          t	        |dk(  rdndt
        j2                  dt
        j2                        S t	        |dk(  rdndt
        j                  dt
        j                        S # t,        $ rG}t	        t/        |      |dk(  rdndt
        j0                  dt
        j0                        cY d }~S d }~ww xY w# t,        $ r?}t	        t/        |      t
        j0                  dt
        j0                        cY d }~S d }~ww xY w)Nr,   r-   r0   r;   r   Email is requiredr<   r   Tr>   r   u_   Cet e-mail n'existe pas dans notre base de données, veuillez saisir une adresse e-mail valide.zFThis email does not exist in our database, please enter a valid email.rB   rC   rD   u   Mot de passe oubliézForgot Passwordzforget_password_email.htmlrF   rK   r   z>Failed to send the verification email. Please try again later.)errorr$   r=   uX   Le code OTP pour réinitialiser le mot de passe a été envoyé à votre adresse e-mail.z7Reset password OTP has been sent to your email address.u   L’e-mail n’existe paszEmail does not exist)rN   rO   rP   r   r   r   rS   rT   rU   rV   r   r   r[   r]   r^   rF   r   r   r   ra   r   r`   r   r   r   rc   )rd   re   rf   r   r0   r   ri   rj   rk   rL   r   r   r   r   r   s                  r&   rl   zForgetPassword.post(  s   >4
//

/
6
<
<
>4
,,488G5
26$,.DW.. ))+ +
 &&UT&JPPR:Ao rM,,	
 '') ) //((ut(LRRT<tT1-GL(,$:KG#$@5'BRSL M))J	B6	^^G]J<X\  k>%%	
   " " /3t|+AW,, '') )#  6;	 fF99 446 66, 
 4
1v77 224 44sb   A;I >A&I %B
I 02H "2I 2I 	I<III II 	J#$4JJ#J#Nrm   rq   r(   r&   r   r   '  s    ?4r(   r   c                       e Zd Zd Zy)ForgetPasswordVerificationc                 P   	 |j                   j                  dd      j                         }|j                  }|j                  d      }|j                  d      }|s3t	        |dk(  rdndt
        j                  dt
        j                  	      S |s3t	        |dk(  rd
ndt
        j                  dt
        j                  	      S t        j                  j                  ||d      j                         }|s4t	        |dk(  rdndi t
        j                  dt
        j                  	      S t	        |dk(  rdndt
        j                  dt
        j                  	      S # t        $ r?}t	        t        |      t
        j                  dt
        j                  	      cY d }~S d }~ww xY w)Nr,   r-   r0   rF   r;   r   r   r<   r   zLe code OTP est requiszOTP is requiredTr   zOTP invalidezInvalid OTPr~   r}   r|   )rN   rO   rP   r   r   r   rS   rT   rU   rV   r[   rc   r   r   r   )rd   re   rf   r   r0   rF   ri   r   s           r&   rl   zForgetPasswordVerification.postm  s   #	=??&&'8$?EEGD<<DHHW%E((5/CAE=Sf"("="=! !557 7
 ;?4<7M^"("="=! !557 7
 #??113Y]1^ddfL15~= ""("="=! !55	7 7 (,9)$00 ((* *
  	=q6$CC ;;= =	=s1   BE 4E A%E *2E 	F%&4F F% F%Nrm   rq   r(   r&   r   r   l  s    $=r(   r   c                       e Zd Zd Zy)SetForgetPasswordc                    	 |j                   j                  dd      j                         }|j                  }|j                  d      }|j                  d      }|j                  d      }|s3t	        |dk(  rdndt
        j                  d	t
        j                  
      S |s3t	        |dk(  rdndt
        j                  d	t
        j                  
      S t        j                  j                  |d      j                         }t        j                  |      }|rQ||_        d |_        |j                          t	        |dk(  rdndt
        j                   d	t
        j                   
      S t	        |dk(  rdndt
        j                  d	t
        j                  
      S # t"        $ r?}	t	        t%        |	      t
        j&                  d	t
        j&                  
      cY d }	~	S d }	~	ww xY w)Nr,   r-   r0   rh   rF   r;   z"Le nouveau mot de passe est requiszNew password is requiredr<   r   r   r   Tr>   r}   r|   zUne erreur s'est produiteSomething went wrong)rN   rO   rP   r   r   r   rS   rT   rU   rV   r[   rY   rZ   r1   rF   r   rc   r   r   r   )
rd   re   rf   r   r0   rh   rF   ri   encrypt_passwordr   s
             r&   rl   zSetForgetPassword.post  s   )	=??&&'8$?EEGD<<DHHW%E88N3L((5/CGKt|CYs"("="=! !557 7
 AE=Sf"("="=! !557 7
 #??11PT1U[[]L&||L9(8%#' !!#,0DLyi"("4"4! !,,. .
  >Bdl:Pf"("="=! !557 7
  	=q6$CC ;;= =	=s1   BF  4F BF ,2F 	G'(4G"G'"G'Nrm   rq   r(   r&   r   r     s    *=r(   r   )datetime)radianscossinasinsqrtc                     t        t        | |||g      \  } }}}|| z
  }||z
  }t        |dz        dz  t        |       t        |      z  t        |dz        dz  z  z   }dt	        t        |            z  }d|z  }|S )Nr.   i  )mapr   r   r   r   r   )	lat1lon1lat2lon2dlatdlonackms	            r&   	haversiner     s    gdD$'?@tT4tta[!^c$i#d)+c$q&k1n<<d1g
Qh
r(   c                       e Zd Zd Zy)TravellerListingc           	      	   |j                   j                  dd      j                         }	 t        |      }t        j                  j                  |d      j                         }|s3t        |dk(  rdnd	t        j                  dt        j                        S |j                  j                  d
      }|j                  j                  d      }|j                  j                  d      }|j                  j                  d      }	|s3t        |dk(  rdndt        j                  dt        j                        S |s3t        |dk(  rdndt        j                  dt        j                        S 	 t!        |      }
t!        |	      }t%        j&                  |d      j)                         }g }t*        j                  j                  |d      j-                  |      }|D ]  }|j.                  s|j0                  st3        |
|t!        |j.                        t!        |j0                              }|dk  sXt4        j                  j                  ||j6                        j9                         rt;        |j<                        dk(  s|j?                  i d|j6                  d|j@                  j6                  d|jB                  d|jD                  d|jF                  d|jH                  d |jJ                  d!|jL                  d"|jN                  d#|j<                  d$|jP                  d%|jR                  d&|jT                  d'|jV                  d(|j@                  jX                  d)|j@                  jZ                          	 t;        |j\                  j                  d*d+            }t;        |j\                  j                  d,d            }t_        |      }|d+z
  |z  }||z   }||| }t        |dk(  rd/nd0||||t        j`                  d1t        j`                        S # t        $ r?}t        t        |      t        j                  dt        j                        cY d }~S d }~ww xY w# t"        $ r6 t        |dk(  rdndt        j                  dt        j                        cY S w xY w# t"        $ r6 t        |dk(  rd-nd.t        j                  dt        j                        cY S w xY w)2Nr,   r-   r<   r   Trx   r?   r;      Utilisateur non trouvéUser not founddatetimelatitude	longitudezLa date est requisezDate is requiredu   L’heure est requisezTime is requiredzLatitude ou longitude invalidezInvalid latitude or longitudez%Y-%m-%d)departure_date__gter?   user
   )senderrouter   rx   user_idtravelling_fromtravelling_todeparture_datedeparture_timearrival_datearrival_timeprice_per_kgtotal_capacity	image_urlnamer6   citytraveller_average_ratingtraveller_is_route_percentagepager   	page_sizePage ou taille de page invalideInvalid page or page_sizer}   r|   r$   total_countr   r   r   r=   )1rN   rO   rP   authenticatedr   r   r   r   HTTP_401_UNAUTHORIZEDrT   rU   rV   r[   r   GETrS   float
ValueErrorr   strptimer   	AddTravelexcluder   r   r   TravellerRequestsrx   rW   intr   appendr   r   r   r   r   r   r   r   r   r   r6   r   average_ratingis_route_percentagequery_paramslenrc   )rd   re   rf   uidr   ri   r   r   latlnguser_latuser_lng
input_dater   filter_querysettraveldistance_kmr   r   r   startendpaginated_datas                          r&   rO   zTravellerListing.get  s   ""#4d;AAC	4(C --t-LRRT8<4JZ$77 //1 1
 !0 0kkooj)kkook*48DL0FX$99 113 3 6:dl2HZ$99 113 3
	3SzHSzH &&~zBGGI
#++22 *! 3 
 '|'
$ 	
 &F6#3#3'(E&//<RTYZ`ZjZjTkl"$,44;;<W]W`W`;ahhjnqrx  sH  sH  oI  MN  oN  ) &)))%v{{~~) .v/E/E) ,V-A-A	)
 -f.C.C) -f.C.C) +F,?,?) +F,?,?) +F,?,?) -f.C.C) ()9)9) #FKK) &v~~) #FKK) 78R8R)  <V[[=\=\!)  &0	3w++//:;DG0044["EFI (mY&i!%,$(DLyi&"& ,,
 $$& 	&i  	4q6$:: 224 4	4@  	3?Ct|;Qp$99 113 3	3R  	3@D<Rm$99 113 3	3sB   P, 2Q7 A
R9 ,	Q454Q/)Q4/Q47<R65R69<S87S8Nrn   ro   rp   rO   rq   r(   r&   r   r     s    `&r(   r   c                       e Zd Zd Zy)HomePageTravellerListingc                 :   	 |j                   j                  dd      }	 t        |      }t        j                  j                  |d      j                  d      j                         }|s3t	        |dk(  rd	nd
t        j                  dt        j                        S t        j                         j!                         }t"        j                  j                  |      j%                  dd      }t&        j                  j                  d|      j)                  |      j)                  |      j)                  d      j+                  ddddddddddddddd d!      }|D 	cg c]  }	|	d   	 }
}	t        j                  j                  |
      j+                  dd"d#      }|D ci c]  }|d   |
 }}g }|D ]R  }|j                  |d   i       }|j                  d"d      |d$<   |j                  d#d%      |d&<   |j-                  |       T 	 t/        |j0                  j                  d'd(            }t/        |j0                  j                  d)d*            }t7        |      }|d(z
  |z  }||z   }||| }t	        |dk(  rd-nd.||||t        j8                  d/t        j8                        S # t        $ rF}t	        |dk(  rt        |      ndt        j                  dt        j                        cY d }~S d }~ww xY wc c}	w c c}w # t2        $ r6 t	        |dk(  rd+nd,t        j4                  dt        j4                        cY S w xY w# t        $ rF}t	        dk(  rt        |      nd0t        j:                  dt        j:                        cY d }~S d }~ww xY w)1Nr,   r-   u   Non autorisér<   r   Tr   rx   r   r   )r   route_id)flat)r?   r   r   )id__inr   )r   r   r   r   r   r   r   r   r   r   r   r   r6   r   sender_countrysender_cityr   r   r   Fr   r   r   r   r   r   r   r|   r}   r   zErreur interne du serveur)rN   rO   r   r   r   r   r   r   rT   rU   rV   onlyr[   r   r   todayr   r   values_listr   r   valuesr   r   r   r   rS   r   rc   r   )rd   re   rf   r   r   ri   r
  existing_requestsr   itemuser_ids	user_infouuser_info_mapr   r   	user_metar   r   r   r   r   r   s                          r&   rO   zHomePageTravellerListing.get>  s   X	=??&&'8$?D8#G, #??11S41PUUVZ[aacL374</E^"(";";! !335 5
 NN$))+E 1 9 9 @ @ @ U a ablsw a x'//66!%$) 7  g!  g(  g   f!    ! 8 5DDODYOHD..h.?FFtM]_tuI1:;AQtWaZM;H))--fY.?D	5>]]CSUV5W12:C--H]_d:e67'	 *77//33FA>? 4 4 8 8b IJ	 h-KAX*E)#C%eC0N(,9)*&*$00 ((* *M  8)-s1v?"(">">! !668 88Z E;  7>Bdl:Pq"("="=! !557 77(  	=%)T\3q67R$CC ;;= =	=s   M J- A2M CM #K?/7M &L3AM A
L	 AM -	K<6;K71K<2M 7K<<M 	<MM MM 	N;NNNNr   rq   r(   r&   r  r  =  s    Y=r(   r  c                       e Zd Zd Zy)SendRequestc                 <   	 |j                   j                  dd      }	 t        |      }t        j                  j                  |d      j                         }|s5|dk(  rd	nd
}t	        |t
        j                  dt
        j                        S |j                  }|j                  d      }|j                  d      }	|j                  d      }
|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|r|j                  d      sd| }|j                  d      }|s5|dk(  rdnd}t	        |t
        j                  dt
        j                        S |	s5|dk(  rdnd}t	        |t
        j                  dt
        j                        S |
s5|dk(  rdnd}t	        |t
        j                  dt
        j                        S |s5|dk(  rd nd!}t	        |t
        j                  dt
        j                        S |s5|dk(  rd"nd#}t	        |t
        j                  dt
        j                        S |s5|dk(  rd$nd%}t	        |t
        j                  dt
        j                        S |s5|dk(  rd&nd'}t	        |t
        j                  dt
        j                        S |s5|dk(  rd(nd)}t	        |t
        j                  dt
        j                        S |s5|dk(  rd*nd+}t	        |t
        j                  dt
        j                        S |s5|dk(  rd,nd-}t	        |t
        j                  dt
        j                        S |s5|dk(  rd.nd/}t	        |t
        j                  dt
        j                        S |s5|dk(  rd0nd1}t	        |t
        j                  dt
        j                        S |s5|dk(  rd2nd3}t	        |t
        j                  dt
        j                        S t        j                  j                  |d      j                         }|s5|dk(  rd4nd5}t	        |t
        j                  dt
        j                        S t        j                  j                  |	6      j                         }|s5|dk(  rd7nd8}t	        |t
        j                  dt
        j                        S t!        |j"                        t!        |      k\  sQ|dk(  rd9|j"                   d:nd;|j"                   d:}t	        |t
        j                  dt
        j                        S t$        j                  j                  |||<      j'                         }|st$        j                  j)                  ||||
|||||||||||=       	 |j*                  r?t-        |j*                  |dk(  rd>nd?|dk(  r|j.                   d@n|j.                   dA       t0        j                  j)                  ||dk(  r|j.                   d@n|j.                   dAB       dD|_        |j7                          |dk(  rdEndF}t	        |t
        j8                  dt
        j8                        S # t        $ r?}|dk(  rdnd}t	        |t
        j                  dt
        j                        cY d }~S d }~ww xY w# t        $ r}t3        dC|        Y d }~d }~ww xY w# t        $ r?}t	        t;        |      t
        j<                  dt
        j<                        cY d }~S d }~ww xY w)GNr,   r-   Unauthorized access   Accès non autorisér<   r   Tr   r   r   traveller_idr  r   parcel_drop_off_addressreceipient_countryreceipient_cityr  r  weight_parcelparcel_descriptionrecepient_emailrecepient_phone_numberrecepient_country_coder5   recepient_nameztraveller_id is requiredz$L'identifiant du voyageur est requiszroute_id is requiredu)   L'identifiant de l'itinéraire est requiszRequest status is requiredz"Le statut de la demande est requisz#Parcel drop-off address is requiredu)   L'adresse de dépôt du colis est requisezRecipient country is requiredz"Le pays du destinataire est requiszRecipient city is requiredz$La ville du destinataire est requisezSender country is requiredu#   Le pays de l'expéditeur est requiszSender city is requiredu%   La ville de l'expéditeur est requisezParcel weight is requiredzLe poids du colis est requiszParcel description is requiredz#La description du colis est requisezRecipient email is requiredz#L'e-mail du destinataire est requisz"Recipient phone number is requiredu4   Le numéro de téléphone du destinataire est requiszRecipient name is requiredz!Le nom du destinataire est requiszTraveler with this ID not foundz)Voyageur avec cet identifiant introuvablerx   zRoute with this ID not foundu,   Itinéraire avec cet identifiant introuvablez Traveler cannot carry more than z kgz,Le voyageur ne peut pas transporter plus de )r   	travellerr   )r   r$  r   
req_statusr  r6   r   r  r  r  r  r   r"  r  r!  zNew parcel requestzNouvelle demande de colisz! has sent you a delivery request.u)    vous a envoyé une demande de livraison.r   r$   Notification sending failed: Fz!Payment Request Sent Successfullyu)   Demande de paiement envoyée avec succès)rN   rO   r   r   r   r   r   rT   rU   rV   r[   r   r   rR   rS   r   r   r   r   rW   r_   r8   r'   r/   UserNotificationsprinteditabler   rc   r   r   )rd   re   rf   r   r   r$   ri   r   r  r  r%  r  r  r  r  r  r  r  r  r   r!  r"  get_traveller_objget_route_objfind_requests                            r&   rl   zSendRequest.post  sR   B	T??&&'8$?DG#G,
 #??11S41PVVXL.2dl*@YG6C\C\ ]flff  A  A<<D88N3Lxx
+H(+J&*hh/H&I#!%*>!?"hh'89O!XX&67N((=1K HH_5M!%*>!?"hh'89O%)XX.F%G"%)XX.F%G"%.D.O.OPS.T+,-C,D)E&!XX&67N8<4JpG6C^C^ _hn  iD  iD  E  E48DL0FqG6C^C^ _hn  iD  iD  E  E:>$,6LpG6C^C^ _hn  iD  iD  E  E*CG4<?  VAG6C^C^ _hn  iD  iD  E  E%=AT\9OsG6C^C^ _hn  iD  iD  E  E":>$,6LrG6C^C^ _hn  iD  iD  E  E!:>$,6LqG6C^C^ _hn  iD  iD  E  E7;t|3IpG6C^C^ _hn  iD  iD  E  E 9=5KiG6C^C^ _hn  iD  iD  E  E%>Bdl:PuG6C^C^ _hn  iD  iD  E  E";?4<7MrG6C^C^ _hn  iD  iD  E  E)BF$,>  UKG6C^C^ _hn  iD  iD  E  E!:>$,6LoG6C^C^ _hn  iD  iD  E  E ' 6 6,Y] 6 ^ d d f$?Ct|;Q|G6C\C\ ]flff  A  A%--444AGGIM <@DL8N|G6C\C\ ]flff  A  A}334M8JJbfjnbn<]=Y=Y<ZZ]^  wc  dq  d@  d@  cA  AD  uEG6C^C^ _hn  iD  iD  E  E,44;;#+# <  fh	   !))00'/'),C.(#1 +"/$3+A#1'9+A 1 "?(22.-7748DL0Fa\`dh\h|5566WXq}  rH  rH  qI  Ir  os
 &--44.`dhl`l<#9#9"::[ \  vB  vL  vL  uM  Mv  sw 5  &+M" =AT\9OzGv?Q?QR[a[m[mnnw  G374</E[G6C_C_ `io  jF  jF  G  GGh ! ?9!=>>?  	TAf>c>cdms  nS  nS  T  T	Ts   ] [$ A%] E] 6] 6] 6] >6] 56] ,6] #6] 6] 6] 6] ?6] 66] -A%] A$] 8A1] *A ] B\/ A] $	\,-4\'!\,"] '\,,] /	]8]] ]] 	^4^^^Nrm   rq   r(   r&   r  r    s	    CTr(   r  c                       e Zd Zd Zy)UploadImagesc                    |j                   j                  dd      }	 t        |      }t        j                  j                  |d      j                         }|s&|dk(  rd	nd
}t	        d|it
        j                        S |j                  }|j                  d      }t        d |D              s&|dk(  rdnd}t	        d|it
        j                        S g }	|D ]1  }
t        |
      }t         j"                  |z   }|	j%                  |       3 |dk(  rdnd}t	        ||	d   d      S # t        $ r0}|dk(  rdnd}t	        d|it
        j                        cY d }~S d }~ww xY w)Nr,   r-   r  r  r$   r   Tr   r   r   imagesc              3       K   | ]  }|  y wNrq   ).0fs     r&   	<genexpr>z$UploadImages.post.<locals>.<genexpr>5  s     %f1fs   zNo images foundu   Images non trouvéesr|   r}   r   )r$   url)rN   rO   r   r   r   r   r   rT   rU   rV   r[   r   r   getlistanyuploadTheProfiler   BASE_URLr   )rd   re   rf   r   r   r$   ri   r   r1  
image_urlsimage
image_pathr   s                r&   rl   zUploadImages.post%  sX   ""#4d;	W(C
 --t-LRRT*.$,&<UGY09R9RSS||h'%f%%+/4<'=SGY09R9RSS
E)%0J ))J6Ii( 
  $t|)GJqMBCC/  	W/3t|+AWGY09U9UVV	Ws   D' '	E 0%EE E Nrm   rq   r(   r&   r/  r/  $  s    Dr(   r/  c                       e Zd Zd Zd Zy)UserDetailsc                 t   	 |j                   j                  dd      }	 t        |      }t        j                  j                  |d      j                         j                         }|s5|dk(  rd	nd
}t	        |t
        j                  dt
        j                        S t        j                  j                  |      j                         }|r |j                  |j                         }||d<   |dk(  rdnd}t	        ||t
        j"                  dt
        j"                        S # t        $ r?}|dk(  rdnd}t	        |t
        j                  dt
        j                        cY d }~S d }~ww xY w# t        $ r?}t	        t%        |      t
        j&                  dt
        j&                        cY d }~S d }~ww xY w)Nr,   r-   r  r  r<   r   Tr   r   r   r   document_urlr|   r}   )r$   r   r=   )rN   rO   r   r   r   r   r   rT   rU   rV   r  r[   r   UserDocumentlastbuild_absolute_uridocumentrc   r   r   )	rd   re   rf   r   r   r$   r   user_documentrC  s	            r&   rO   zUserDetails.getH  s   K
//

/
64{

 C
 //
 
 C$
 
?
F
F
H
N
N
P4
"&$,4MGv7P7PQZ`ZsZstt''..s.;@@B=--m.D.DEL'D$,YI7
wFDVDVW`f`r`r
ss  {'+t|#9OGv7S7ST]c]y]yzz{" 
 K
s1vV5Z5Z[dj  eJ  eJ  K  KKsS   E/ D$ A3E/ BE/ $	E,-4E'!E,"E/ 'E,,E/ /	F784F2,F72F7c                 Z   	 |j                   j                  dd      }	 t        |      }t        j                  j                  |d      j                         }|s5|dk(  rd	nd
}t	        |t
        j                  dt
        j                        S |j                  }|j                  d      }|j                  d      }	|j                  d      }
|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|r||_        |	r|	|_        |
r|
|_        |r||_        |r||_        |r||_        |r||_        |r||_        |r||_        	 |j-                          |dk(  rdnd}t	        |t
        j0                  dt
        j0                        S # t        $ r?}|dk(  rdnd}t	        |t
        j                  dt
        j                        cY d }~S d }~ww xY w# t        $ r?}t	        t/        |      t
        j                  dt
        j                        cY d }~S d }~ww xY w# t        $ r?}t	        t/        |      t
        j2                  dt
        j2                        cY d }~S d }~ww xY w)Nr,   r-   r  r  r<   r   Tr   r   r   r/   r0   genderager=  dobr6   r7   addresszUser updated successfullyu$   Utilisateur mis à jour avec succès)rN   rO   r   r   r   r   r   rT   rU   rV   r[   r   r   r/   r0   rJ  rK  r=  rL  r6   rM  r7   r   r   rc   r   )rd   re   rf   r   r   r$   r   r   r/   r0   rJ  rK  r=  rL  r6   r7   rM  s                    r&   rl   zUserDetails.postb  sc   5K
//

/
64{

 C
 //
 
 C
 
>
D
D
F4
"&$,4MGv7P7PQZ`ZsZstt
,,4xx$988G5HHX6	%388G5	%3XXi 7xx 34XXi 7DNDJDK	DHDJ	DHDLDL.DtIIK -1DL(>d7
wf6H6HIRXRdRd
ee[  {'+t|#9OGv7S7ST]c]y]yzz{R  tAf6O6OPY_YrYrsst 
 K
s1vV5Z5Z[dj  eJ  eJ  K  KKs   I" G A%I" C6I" H 4I" 	H4H	H
I" HI" 	I 4III" II" "	J*+4J%J*%J*Nrn   ro   rp   rO   rl   rq   r(   r&   r@  r@  G  s    K46Kr(   r@  c                       e Zd Zd Zd Zy)AcceptedRequestsCreateRoutec                 N	   	 |j                   j                  dd      }	 t        |      }t        j                  j                  d|      j                         j                         }|s3t	        |dk(  rdnd	t        j                  dt        j                        S |j                  j                  d
      }|dk(  r't        j                  j                  |d   ddg      }n&t        j                  j                  |d   g d      }|j!                         }	 t#        |j$                  j                  dd            }	t#        |j$                  j                  dd            }
|	dz
  |
z  }||
z   }||| }g }|D ]  }|j+                  i d|j,                  d|j.                  j,                  d|j.                  j0                  d|j2                  j,                  d|j2                  j0                  d|j2                  j4                  d|j2                  j6                  d|j2                  j8                  d|j2                  j:                  d|j<                  j,                  d|j<                  j>                  d |j<                  j@                  d!|j<                  jB                  d"|jD                  d#|j<                  jF                  d$|j<                  jH                  d%|j<                  jJ                  |j<                  jL                  |j<                  jN                  |j<                  jP                  |j4                  |jR                  |jT                  |jV                  |jX                  |jZ                  rdnd&|j\                  d'
        t	        |dk(  rd(nd)||	|
|t        j^                  d*t        j^                        S # t        $ r?}t	        t        |      t        j                  dt        j                        cY d }~S d }~ww xY w# t&        $ r6 t	        |dk(  rdndt        j(                  dt        j(                        cY S w xY w# t        $ r?}t	        t        |      t        j`                  dt        j`                        cY d }~S d }~ww xY w)+Nr,   r;   r<   r   Tr?   rx   r-   r   r   r   	completedrx   rejected)r   req_status__in)rE   acceptedPickedr   r   r   r   zInvalid page or page sizer   	sender_idsender_full_namer  traveller_full_nametraveller_phone_numbertraveller_country_coder   r   r  r   r   r   weight_of_parcelr   r   r   F)
r   r   r   rA   r  r6   r   r%  	is_ratingpayment_statusr|   r}   r   )1rN   rO   r   r   r   r   r   r   rT   rU   rV   r  r[   r   r   r   r   r   r   r   rS   r   rx   r   r/   r$  rA   r@   r   r   r   r   r   r   r  r   r   r   r   r   r   r  r6   r   r%  ratingr_  rc   r   )rd   re   rf   r   r   r   order_statusquerysetr   r   r   r   r   paginated_queryset	data_listr   s                   r&   rO   zAcceptedRequestsCreateRoute.get  s   KK
//

/
64z

 C //
 
 $3
 
?
F
F
H
N
N
P4
DDL 0F_ou  pI  pI  J  SY  Sl  Sl  m  m++//(+< k! ((//tDzS^`jRk/lH ((//tDzRs/tH!;Dw##''23DG((,,["=>I 1H	!5		3 s+9!t 	477$++.. .. T^^&&	
 DNN44 t~~:: t~~::  !>!> %dnn&H&H  TZZ__ $**&& TZZ,, ++ tzz00  tzz00!" TZZ,,#$ ZZ,,

22jj..&& $ < <YY??++$5**7  ">  DLyi$$ ! !y  zAf6R6RS\b\x\xyyz(  Dtt| ;Qr  CI  C^  C^  _  hn  hC  hC  D  DDb 
 K
s1vV5Z5Z[dj  eJ  eJ  K  KKsy   Q O A1Q A=Q A
P $I*Q 	P4PPQ PQ <QQ QQ 	R$%4RR$R$c                    	 |j                   j                  dd      }	 t        |      }t        j                  j                  d|      j                         }|s3t	        |dk(  rdnd	t        j                  dt        j                        S |j                  }|j                  d
      }|s3t	        |dk(  rdndt        j                  dt        j                        S t        j                  j                  |d      j                         }|s3t	        |dk(  rdndt        j                  dt        j                        S |j                  d      }	|	s3t	        |dk(  rdndt        j                  dt        j                        S t         j                  j#                  ||	      }
|	|_        t'        |j(                  j*                        t'        |j,                        z
  |j(                  _        |j/                          t'        |
j0                  j(                  j*                        t'        |
j0                  j,                        z
  |
j0                  j(                  _        |
j/                          	 |j2                  }|j4                  j6                  }|j8                  r+t;        |j8                  |dk(  rdnd|dk(  r| dn| d       t<        j                  j#                  ||dk(  r| dn| d       t	        |dk(  rdndt        j@                  dt        j@                        S # t        $ r?}t	        t        |      t        j                  dt        j                        cY d }~S d }~ww xY w# t        $ r}t?        d|        Y d }~d }~ww xY w# t        $ r?}t	        t        |      t        jB                  dt        jB                        cY d }~S d }~ww xY w)Nr,   r;   r<   r   TrR  r-   r   r   
request_idrequest_id is requiredzrequest_id est requisrV  rx   r%  zTraveller request not foundzDemande du voyageur introuvabler_  zPayment status is requiredzLe paiement est requis)requestsr_  zRoute confirmedu   Trajet confirméz* has completed the booking for your route.u0    a complété la réservation pour votre trajet.r&  r'  zRoute created successfullyu   Trajet créé avec succès)"rN   rO   r   r   r   r   r   r   rT   rU   rV   r[   r   r   rS   r   MyRouter_   r_  r   r   r   r  r   ri  r$  r   r/   r8   r'   r(  r)  rc   r   )rd   re   rf   r   r   r   r   rf  filter_datar_  create_routereceiversender_names                r&   rl   z AcceptedRequestsCreateRoute.post  s'   5K
//

/
64z

 C //
 
 $3
 
?
E
E
G4
DDL 0F_ou  pI  pI  J  SY  Sl  Sl  m  m
,,4&:
DDL 8Neu{  vQ  vQ  R  [a  [v  [v  w  w"**11ZJ1W]]_;
 =St  EK  E^  E^  _  hn  hA  hA  B  BHH-.>
 <Rj  {A  {V  {V  W  `f  `{  `{  |  |//((+n(]< .;&)+*;*;*J*J&KcR]RkRkNl&l;#03L4I4I4O4O4^4^0_befrf{f{  gJ  gJ  cK  1K<-/$$H$$..K4<-?DHDL?@YdXe  fV  WW $$
KOSW<}FG`k_l  m]  ^^ %  tt|;Qm  ~D  ~P  ~P  Q  Z`  Zl  Zl  m  m[  zAf6R6RS\b\x\xyyzT  /	)!
-../
 
 K
s1vV5Z5Z[dj  eJ  eJ  K  KKs   N" L3 A#N" AN"  A#N" AN" 
C.N" 9BM>  2N" 3	M;<4M60M;1N" 6M;;N" >	NNN" NN" "	O*+4O%O*%O*NrN  rq   r(   r&   rP  rP    s    LK\6Kr(   rP  )Decimalc                       e Zd Zd Zy)Payment2c           
         |j                   j                  dd      }	 t        |      }t        j                  j                  d|      j                         }|j                  j                  d      }|j                  j                  d      }|j                  j                  d	      }|j                  j                  d
      }	|j                  j                  d      }
|	s$t	        d|dk(  rdndit        j                        S |
s$t	        d|dk(  rdndit        j                        S |s3t	        |dk(  rdndt        j                  dt        j                        S |s3t	        |dk(  rdndt        j                  dt        j                        S t        j                  j                  |d      j                         }t        j                   t"        _        |s3t	        |dk(  rdndt        j&                  dt        j&                        S |j(                  st+               |_        |j-                          |j(                  }t.        j                  j                  ||	      j                         }|sVt"        j0                  j3                  ||	      }t.        j                  j5                  ||
|d   |d   |d   |d   |d    !      }t7        |j8                  |j:                  |      }|d"   du rmt<        j                  j                  |#      j                         }t?        |      }|t?        d$      z  }||z
  }t@        j                  j                         }|r1|jB                  xs t?        d%      |z   |_!        |j-                          |rd&|_"        tG        |jH                  jJ                  jL                        tG        |jH                  jN                        z
  |jH                  jJ                  _&        |jH                  jJ                  j-                          nt<        j                  j5                  |d&|'      }tG        |jH                  jJ                  jL                        tG        |jH                  jN                        z
  |jH                  jJ                  _&        |jH                  jJ                  j-                          |jH                  jJ                  jP                  xjR                  |z  c_)        |jH                  jJ                  jP                  xjT                  |z  c_*        |jH                  jJ                  jP                  j-                          d&|_"        |j-                          	 |jH                  jV                  }|jH                  jX                  }|jZ                  r?t]        |jZ                  |dk(  rd(nd)|dk(  r|j^                   d*n|j^                   d+       t`        j                  j5                  ||dk(  r|j^                   d*n|j^                   d+,       t	        |dk(  rd.nd/t        jd                  dt        jd                        S t	        |dk(  rd0nd1t        jd                  dt        jd                        S # t        $ r0}t	        dt        |      it        j                        cY d }~S d }~ww xY w# t        $ r}tc        d-|        Y d }~d }~ww xY w)2Nr,   r;   r$   r   TrR  rf  pricepayment_tokencard_id	card_typer-   card_id is requiredIdentifiant de carte requiscard_type is requiredType de carte requisrg  zIdentifiant de demande requisr<   zprice is requiredzMontant requisrV  rh  zTravellerRequests not foundzDemande de voyageur introuvable)r   ru  sourcerx   	exp_monthexp_yearcustomerlast4r   rv  ru  r}  r~  the_user_stripelast_digitsr   )ri  z0.10z0.00rS  )ri  r_  paymentzPayment Receivedu   Paiement reçuz/ has completed payment for the parcel delivery.u9    a effectué le paiement pour votre itinéraire de colis.r&  zNotification error: zpayment created successfullyu   Paiement effectué avec succèsr   zUne erreur est survenue)3rN   rO   r   r   r   r   r   r   rT   rU   rV   r[   r   rS   r   r   STRIPE_SECRET_KEYstripeapi_keyr   rG   r\   r   	UserCardsCustomercreate_sourcer_   paymentWithExistingCardr  ru  rj  ro  
SuperAdminearningsr_  r   ri  r   r   r  r   wallet_moneytotal_earningr$  r   r8   r'   r/   r(  r)  rc   )rd   re   rf   r   r   user_objrf  rs  rt  ru  rv  rk  r   cardObj
createCardthePaymentObjr   payment_amount
commissiondeducted_amountsuper_adminr$  r   s                          r&   rl   zPayment2.post5  s   			.	5$M	w	3 __##Tc#BHHJ(||-*
,,

7
#%,,""?3-LLY''ll{+)	
I4Jghqw  rM  rM  N  N	
I$$,6Lbclr  mH  mH  I  I	
44<7Ml  }C  }X  }X  Y  bh  b}  b}  ~  ~	
ddl2HXhn  iD  iD  E  NT  Ni  Ni  j  j!))00J:0V\\^+--&.	
<Rs  DJ  D]  D]  ^  gm  g@  g@  A  A		 	 .08==?##'$$(G$DJJL'	--gg-F:%%	t%
#z*7# & 7 *'*A*A7??TYZ-8$??!!;!7==?5EN>0:#j0?##))+;'00CGFOzQK&E*-enn.B.B.Q.Q*RUXY^YgYgYuYuUv*vENN'	NNOO""K]b"cE*-enn.B.B.Q.Q*RUXY^YgYgYuYuUv*vENN'	NN>>))_<)>>**o=*>>!!# +;&((I^^""F DL.>NRVZl		IJcicscsbt  un  ao $$
UY]aUa  !!PQjpjzjzi{  |u  hv %  =St  EK  EW  EW  X  ag  as  as  t  t 5Kdtz  uG  uG  H  QW  Qc  Qc  d  d} 
 M
Is1v&v/K/K
LLMp  &	 
$%%&s6   Z :B9[ 	["%[[[	[6[11[6Nrm   rq   r(   r&   rq  rq  4  s	    cdr(   rq  c                       e Zd Zd Zy)addUserCardc           
      r   |j                   j                  dd      }	 	 t        |      }t        j                  j                  d|      j                         }|s$t	        d|dk(  rdnd	it        j                        S |j                  j                  d
      }|s$t	        d|dk(  rdndit        j                        S |j                  j                  d      }|s$t	        d|dk(  rdndit        j                        S |j                  st!               |_        |j#                          i }|j                  r|j                  }	t$        j&                  t(        _        t(        j,                  j/                  |	|      }
|
rt0        j                  j3                  |||
d   |
d   |
d   |
d   |
d         }|j4                  |j6                  |j8                  |j:                  |j<                  |j>                  |j@                  |jB                  |jD                  d	}t	        t        jF                  |dk(  rdnd|d      S # t        $ r0}t	        dt        |      it        j                        cY d }~S d }~ww xY w# t        $ r0}t	        dt        |      it        jH                        cY d }~S d }~ww xY w)Nr,   r;   r$   r   TrR  r-   r   Utilisateur introuvableru  rw  rx  rv  ry  rz  r{  rx   r}  r~  r  r  r  	rx   r   ru  r}  r~  r  r  
is_defaultrv  r|   r}   status_coder$   r   )%rN   rO   r   r   r   r   r   r   rT   rU   rV   r[   r   r   rS   rG   r\   r   r   r  r  r  r  r  r  r_   rx   r   ru  r}  r~  r  r  r  rv  rc   r   )rd   re   rf   r   r   r  ru  rv  alldatar   r  r  s               r&   rl   zaddUserCard.post  s   			.	5$2VN

 C oo$$ds$CIIK8
YDDL 0F_`io  jC  jC  D  D\\i(7
Y 5Khirx  sN  sN  O  O||,9
Y44< 7Mcdms  nI  nI  J  J

!
!/1HMMO7%%G//FN..ww.GJ  '';'*% ,W% ( W JJ$$"" 00((&&$$
W 6#5#5tW[|)ajt{|
}}[  NYA'0L0LMMN\ 
 V
Is1v&v/T/T
UUVs\   I AI= ?A I=  A I= D?I= 	I:
%I5/I:0I= 5I::I= =	J6%J1+J61J6Nrm   rq   r(   r&   r  r    s    5Vr(   r  c                       e Zd Zd Zy)getUserCardc                 v   |j                   j                  dd      }	 	 t        |      }t        j                  j                  d|      j                         }|s$t	        d|dk(  rdnd	it        j                        S t        j                  j                  |
      }g }|D ]y  }|j                  |j                  |j                   |j"                  |j$                  |j&                  |j(                  |j*                  |j,                  d	}	|j/                  |	       { t	        t        j0                  |dk(  rdnd|d      S # t        $ r0}t	        dt        |      it        j                        cY d }~S d }~ww xY w# t        $ r0}t	        dt        |      it        j2                        cY d }~S d }~ww xY w)Nr,   r;   r$   r   TrR  r-   r   r  r   r  r|   r}   r=   r$   r   )rN   rO   r   r   r   r   r   r   rT   rU   rV   r[   r   r  rx   r   ru  r}  r~  r  r  r  rv  r   rc   r   )
rd   re   rf   r   r   r  card_objall_Datacardr   s
             r&   rO   zgetUserCard.get  s   			.	5$ VN

 C oo$$ds$CIIK8
YDDL 0F_`io  jC  jC  D  D&&H&588t77..,,$$??..
H OOH  $$ DLyi  /  NYA'0L0LMMN8 
 V
Is1v&v/T/T
UUVsN   E AE? ?CE? 	E<%E71E<2E? 7E<<E? ?	F8%F3-F83F8Nr   rq   r(   r&   r  r    s    #Vr(   r  c                       e Zd Zd Zy)deleteUserCardc                    |j                   j                  dd      }	 	 t        |      }t        j                  j                  d|      j                         }|s$t	        d|dk(  rdnd	it        j                        S |j                  j                  d
      }|s$t	        d|dk(  rdndit        j                        S t        j                  j                  |      j                         }|s$t	        d|dk(  rdndit        j                        S t         j"                  t$        _        t$        j(                  j+                  |j,                  |j.                         |j1                          t	        t        j2                  |dk(  rdndd      S # t        $ r0}t	        dt        |      it        j                        cY d }~S d }~ww xY w# t        $ r0}t	        dt        |      it        j4                        cY d }~S d }~ww xY w)Nr,   r;   r$   r   TrR  r-   r   r  ru  rw  zcard_id est requisr#  zNo card foundu   Aucune carte trouvéer|   r}   r  r$   )rN   rO   r   r   r   r   r   r   rT   rU   rV   r[   r   r   rS   r  r   r  r  r  r  delete_sourcer  ru  deleterc   r   )rd   re   rf   r   r   r  ru  r  s           r&   rl   zdeleteUserCard.post   s   			.	5$VN

 C oo$$ds$CIIK8
YDDL 0F_`io  jC  jC  D  D\\i(7
Y 5K_`io  jE  jE  F  F&&'&288:8
Y44<E\]fl  gB  gB  C  C..6>	??   ??
6#5#5tW[|)ajk
ll-  NYA'0L0LMMN. 
 V
Is1v&v/T/T
UUVs\   F AG ?A G  AG A?G 	G%GGG GG 	H	%H>H	H	Nrm   rq   r(   r&   r  r    s    Vr(   r  c                       e Zd Zd Zy)createConverstationUserc                 	   |j                   j                  dd      }	 t        |      }t        j                  j                  d|      j                         }|s$t	        d|dk(  rdnd	it        j                        S |j                  j                  d
      }|s3t	        t        j                  |dk(  rdnddt        j                        S t        j                  j                  d|      j                         }|s3t	        t        j                  |dk(  rdnddt        j                        S t        j                  j                  ||      j                         }|r|j                   }	nt        |j"                        t        |j"                        z   t        |j$                        z   t        |j$                        z   }
t'        |
      }t)        j*                  |       dj-                  |      }t.        j0                  j2                  j0                  j5                  |      }t        j                  j                  t7        ||      t7        ||      z        j                         }|s2t        j                  j5                  ||      }|j8                  |_        t;        j<                         |_        |jA                          t        |j$                        t        |j"                        t        |jB                        d}tE        jF                  |      }t.        j0                  j2                  j1                  |j8                        jH                  j5                  t        |j$                        |      }t        |j$                        t        |j"                        t        |jB                        d}tE        jF                  |      }t.        j0                  j2                  j1                  |j8                        jH                  j5                  t        |j$                        |      }|j8                  |_%        |j8                  |_&        |jA                          |j                   }	t	        t        jN                  |dk(  rdnd|	dt        jN                        S # t        $ r0}t	        dt        |      it        j                        cY d }~S d }~ww xY w)Nr,   r;   r$   r   TrR  r-   r   r  	chat_userzchat_user is required.zchat_user est requis.r  zNo user foundu   Aucun utilisateur trouvé)user_twouser_oner4   )friendly_name)r  r  )rx   r   r=  )identity
attributeszConversation added successfullyu"   Conversation ajoutée avec succès)r  r$   twilio_channel_sid)(rN   rO   r   r   r   r   r   r   rT   rU   rV   r[   r   r   rS   ConversationUsersr  r/   rx   listr]   shufflejoinclientconversationsv1r_   r   sidr   nowlast_messager   r=  jsondumpsparticipantsuser_one_twilio_iduser_two_twilio_idrc   )rd   re   rf   r   r   userObjr  chat_userObj_objexisting_conversationr  concatinate_namessuffle_stringconversation_nameconversationconversation_objuser_attributesuser_json_attributeschat_user_participantuser_two_attributes#user_two_attributes_json_attributesuser_two_attributes_participants                        r&   rl   zcreateConverstationUser.post&  s>   			.	5$M	w	3 OO""DS"AGGI'	
I44</E^_hn  iB  iB  C  Cll{+)	
6#>#>gkosgsKc  zQ  R  [a  [v  [v  w  w__++Ti+PVVX	
6#>#>^bfj^j?  qL  M  V\  Vq  Vq  r  r+33::DT_f:gmmo-@@+556W=N=N9OORUVfViViRjjmpqxq{q{m||)*=	>>- ww}-&&R]V+V, 
 (//66w!12Q@P[b5cc
UW  (0077Sc7d*6*:*:'#+<<>  gjj/!!"?
 **_5!//R]<##$\VS_1EVF	  !!
" **+!''(
 *.4G)H&%+%9%9R]<##$\VS),,-:]V^	 # *?)B)B&)H)L)L&(;;	$$374</Ei+ 	
   M 
 M
Is1v&v/K/K
LLMs   R, ,	S%5%S S% S%Nrm   rq   r(   r&   r  r  %  s    O r(   r  c                       e Zd Zd Zy)createTokenc                    |j                   j                  dd      }	 	 t        |      }t        j                  j                  d|      j                         }|s$t	        d|dk(  rdnd	it        j                        S |j                  }t        t        t         t"        |
      }t$        r!t'        t$              }|j)                  |       t*        j,                  j.                  j1                  t$              j2                  j5                         j7                  ddd      }	||j9                         d}
t	        t        j:                  |dk(  rdnd|
dt        j:                        S # t        $ r0}t	        dt        |      it        j                        cY d }~S d }~ww xY w# t        $ r?}t	        t        j<                  t        |      dt        j<                        cY d }~S d }~ww xY w)Nr,   r;   r$   r   TrR  r-   r   r  )r  )service_siddefaultz5You have a new message in ${CONVERSATION}: ${MESSAGE})new_message_enablednew_message_soundnew_message_template)r  r   zToken added successfullyu   Jeton ajouté avec succèsr  r   r$   )rN   rO   r   r   r   r   r   r   rT   rU   rV   r[   r   rx   r   account_sidapi_sid
api_secretchat_service_sidr   	add_grantr  r  r  servicesconfigurationnotificationsupdateto_jwtrc   r   )rd   re   rf   r   r   r  r  r   
chat_grantr   r  s              r&   rO   zcreateToken.get~  s   			.	5$*4N

 C __##Tc#BHHJ7
YDDL 0F_`io  jC  jC  D  Djj8{GZ(K5'78J	OOJ&&RX]]_V Q    \\^7 %%-1T\)?[ 	! !;  NYA'0L0LMMNF 
 4
331v 224 44sN   E+ AF' ?C+F' +	F$4%FF$F' F$$F' '	G/04G*$G/*G/Nr   rq   r(   r&   r  r  }  s    ,4r(   r  c                       e Zd Zd Zy)userConversationListingc                    |j                   j                  dd      }	 	 t        |      }t        j                  j                  d|      j                         }|s$t	        d|dk(  rdnd	it        j                        S t        j                  j                  t        |j                  
      t        |j                        z        j!                  |      j#                  d      }g }|D ]  }t$        j&                  j(                  j'                  |j*                        j,                  j/                  dd      }	d}
d}d}|	D ]  }|j0                  rK|j0                  }
t3        j4                  |
      }
|
d   }
t7        |j8                        dz   }|j8                  }Z|j:                  rg|dk(  rdnd}
t7        |j8                        dz   }|j8                  } |j                  |j*                  |j<                  j>                  |j<                  j@                  |j<                  j                  |j<                  jB                  |jD                  j>                  |jD                  j@                  |jD                  j                  |jD                  jB                  |
||d}|jG                  |        t	        t        jH                  |dk(  rdnd|dt        jH                        S # t        $ r0}t	        dt        |      it        j                        cY d }~S d }~ww xY w# t        $ r?}t	        t        jJ                  t        |      dt        jJ                        cY d }~S d }~ww xY w)Nr,   r;   r$   r   TrR  r-   r   r  )r  )r  )user_deleted-iddescr   )orderlimitr4    agoz
Media fileu   Fichier média)rx   r  user_one_nameuser_one_imageuser_one_iduser_one_phone_numberuser_two_nameuser_two_imageuser_two_iduser_two_phone_numberr  r   message_dater|   r}   r  r  )&rN   rO   r   r   r   r   r   r   rT   rU   rV   r[   r   r  r   rx   r   order_byr  r  r  r  messagesr  r   r  loadsr   date_createdmediar  r/   r=  r2   r  r   rc   r   )rd   re   rf   r   r   r  r  conversation_listr  r  r  r   r  recordconversation_datas                  r&   rO   zuserConversationListing.get  s	   			.	5$C4N

 C __##Tc#BHHJ7
YDDL 0F_`io  jC  jC  D  D$,,33wzzQ

33W  Xe_	  $|##bmL334h
dqd!	  LDL[[lZZ-l!),lv**+f4d((lll%)T\\7Glv**+f4d((l  ??'::"++55#,,22 )),,*33??"++55#,,22 )),,*33??!! ./M %P %% DLyi 	! !m  NYA'0L0LMMNx 
 4
331v 224 44sU   K( AL$ ?D-L$ -D:L$ (	L!1%LL!L$ L!!L$ $	M,-4M'!M,'M,Nr   rq   r(   r&   r  r    s    E4r(   r  c                       e Zd Zd Zy)RatngReviewc           	      N   |j                   j                  dd      }	 	 t        |      }t        j                  j                  d|      j                         }|s$t	        d|dk(  rdnd	it        j                        S |j                  j                  d
      }|j                  j                  d      }|j                  j                  d      }|s$t	        d|dk(  rdndit        j                        S |s$t	        d|dk(  rdndit        j                        S |s$t	        d|dk(  rdndit        j                        S t        j                  j                  |d      j                         }	|	s$t	        d|dk(  rdndit        j                        S ||	_        ||	_        |	j%                          |	j&                  }
|
rt        j                  j                  |
dd      }d}d}|D ]   }	 |t)        |j                         z  }|dz  }" |dkD  rt-        ||z  d      |
_        |
j%                          	 |
j0                  rEt3        |
j0                  |dk(  rdnd|dk(  r|j4                   d| dn|j4                   d | d       t6        j                  j9                  |
|dk(  r|j4                   d| d!| d"n|j4                   d | d!| d"#       t	        t        j<                  |dk(  rd%nd&d'      S # t        $ r0}t	        dt        |      it        j                        cY d }~S d }~ww xY w# t*        $ r Y Ww xY w# t        $ r}t;        d$|        Y d }~d }~ww xY w# t        $ r0}t	        dt        |      it        j>                        cY d }~S d }~ww xY w)(Nr,   r;   r$   r   TrR  r-   r   r  rf  r`  reviewrg  z Identifiant de la demande requiszrating is requiredu   Évaluation requisezreview is requiredzAvis requisrS  rh  zThis request does not existzCette demande n'existe pasF)r$  r%  rating__isnullr   r   r.   zNew rating receivedu   Nouvelle évaluation reçuez rated your delivery: u   ⭐u    a évalué votre livraison : u	   ⭐ — ""r&  zRating notification failed: r|   r}   r  ) rN   rO   r   r   r   r   r   r   rT   rU   rV   r[   r   r   rS   r   r`  r  r   r$  r   r   roundr   r8   r'   r/   r(  r_   r)  rc   r   )rd   re   rf   r   r   r  rf  r`  r  
getRequestr$  rated_completed_requeststotal_ratingr   rs                  r&   rl   zRatngReview.postM  s$   			.	5$DVN

 C oo$$ds$CIIK8
YDDL 0F_`io  jC  jC  D  D  .:LLX&6LLX&6
YDDL 8Npq  {A  {V  {V  W  W
Y 4J_`io  jE  jE  F  F
Y 4-Xaga|a|}}!))00J;0W]]_:
Y =Spq  {A  {V  {V  W  W::??##9088??  @   LE%eAHHo%lqje & qy %lU&:A >Y^^0			!%3PDHDL8
4VHC@YaYkYkXl  mK  LR  KS  SV  WW	 &&\`dh\h($$%%;F8:fXUWXqy  rD  rD  qE  Ec  dj  ck  ku  v|  u}  }  o@ '  6#5#5tW[|)ajk
ll}  NYA'0L0LMMNP  
&  0*1#.//0
 
 V
Is1v&v/T/T
UUVs   K; AM+ ?A6M+ 6%M+ %M+ AM+ AM+ 0L7+M+ 9BM "M+ ;	L4%L/)L4*M+ /L44M+ 7	M M+ MM+ 	M(M#M+ #M((M+ +	N$4%NN$N$Nrm   rq   r(   r&   r  r  L  s	    FVr(   r  c                       e Zd Zd Zy)UserDocumentUploadViewc                    |j                   j                  dd      }	 	 t        |      }t        j                  j                  d|      j                         }|s$t	        d|dk(  rdnd	it        j                        S |j                  j                  d
      }|s$t	        d|dk(  rdndit        j                        S t        j                  j!                  ||       d|_        |j%                          t&        j                  j!                  ||dk(  rdnd       t(        j                  j!                  |dk(  r|j*                   dn|j*                   d       t	        |dk(  rdnd|dt        j,                        S # t        $ r0}t	        dt        |      it        j                        cY d }~S d }~ww xY w# t        $ r0}t	        dt        |      it        j.                        cY d }~S d }~ww xY w)Nr,   r;   r$   r   TrR  r-   r   r  rG  zFile not foundzFichier introuvable)r   rG  uploadedz7Your document has been successfully uploaded for admin.uH   Votre document a été téléchargé avec succès pour l'administrateur.r&  z has uploaded their documents.u    a téléchargé ses documents.rM   z$Identity Proof uploaded successfullyu3   Justificatif d'identité téléchargé avec succès)r$   path)rN   rO   r   r   r   r   r   r   rT   rU   rV   r[   r   r   rS   rD  r_   rH   r   r(  rb   r/   HTTP_201_CREATEDr   )rd   re   rf   r   r   r  uploaded_files          r&   rl   zUserDocumentUploadView.post  s   			.	5$%VN

 C oo$$ds$CIIK8
YDDL 0F_`io  jC  jC  D  D<<##J/=
YDDL 0F[\ek  fA  fA  B  B	   )8==?##	IMQUE  \g $ 
 $$EIT\x!!""@AZbZlZlYm  nM  XN %  9=5  LB $$& &9  NYA'0L0LMMNB 
 V
Is1v&v/T/T
UUVsU   F AG ?A G  CG 	F?%F:4F?5G :F??G 	G;%G60G;6G;Nrm   rq   r(   r&   r  r    s    'Vr(   r  )TemplateView)renderc                       e Zd ZdZd Zy)getPrivacyPolicyzuser_privacy_policy.htmlc                     t         j                  j                  dd      j                         }t	        || j
                  t                     S )Nprivacy_policyUser	page_type	user_typeContentPagesrU   rV   r[   r  template_namelocalsrd   re   data_objs      r&   rO   zgetPrivacyPolicy.get  s?    !!((3CPV(W]]_(	**68	44r(   Nrn   ro   rp   r!  rO   rq   r(   r&   r  r    s    +5r(   r  c                       e Zd ZdZd Zy)getTermsConditionszuser_terms.htmlc                     t         j                  j                  dd      j                         }t	        || j
                  t                     S )NTermsr  r  r  r#  s      r&   rO   zgetTermsConditions.get  s=    !!((7v(NTTV(	**68	44r(   Nr%  rq   r(   r&   r'  r'    s    "5r(   r'  c                     t         j                  t         j                  z   dj                  fdt	        |       D              }|S )Nr4   c              3   H   K   | ]  }t        j                          y wr3  )r]   choice)r4  _
characterss     r&   r6  z%generate_ticket_id.<locals>.<genexpr>  s     F1V]]:.s   ")stringascii_lettersdigitsr  range)length	ticket_idr.  s     @r&   generate_ticket_idr5    s5    ""V]]2WWFfFFr(   c                       e Zd Zd Zy)HelpSupportUserViewc                 "   |j                   j                  dd      }	 	 t        |      }t        j                  j                  |      j                         }|s$t	        d|dk(  rdndit        j                        S t        j                  j                         j                         }|j                  d	k(  r/t	        |dk(  rd
nd|j                  dt        j                         S |j"                  j                  d      }|s3t	        t        j$                  |dk(  rdnddt        j$                        S |j"                  j                  d      }|s3t	        t        j$                  |dk(  rdnddt        j$                        S t'               }	t(        j                  j+                  |||j,                  |	       t.        j                  j+                  |dk(  rdndd       t	        t        j0                  |dk(  rdndd      S # t        $ r0}t	        dt        |      it        j                        cY d }~S d }~ww xY w# t        $ r?}t	        t        j2                  t        |      dt        j2                        cY d }~S d }~ww xY w)Nr,   r;   r$   r   r#  r-   r   r  Fz9Your account has been Inactive. Please contact the admin.z>Votre compte est inactif. Veuillez contacter l'administrateur.r$   r0   r   zTitle is requiredzLe titre est requisr=   r$   descriptionzDescription is requiredzLa description est requise)r   r;  r   r4  z,A new support ticket has been raised by useru0   Un nouvel appel a été lancé par l'utilisateurtickets)r$   typez Help & Support sent successfullyu2   Demande d'aide et de support envoyée avec succès)rN   rO   r   r   r   r   r   r   rT   rU   rV   r[   r   r  allr0   HTTP_406_NOT_ACCEPTABLEr   rS   r5  HelpSupportUserr_   rx   rb   rc   r   )
rd   re   rf   r   r   r  	admin_objr   r;  r4  s
             r&   rl   zHelpSupportUserView.post  sw   			.	5$64N

 C oo$$$,2248
YDDL 0F_`io  jC  jC  D  D!!%%'--/9ooOSW[|K  bboo ,,. .
 <<G$5
..'+t|#9N ))+ +
 !!-0;
..-1T\)?[ ))+ +
 "#9!!
KK	 "  $$>Bdl:  QD	 % 
 $$59T\1G|  U  NYA'0L0LMMN^ 
 4
771v 224 44sc   H
 AI >A)I (AI 8AI BI 
	I%H>8I9I >II 	J4J	J	JNrm   rq   r(   r&   r7  r7    s    84r(   r7  c                       e Zd Zd Zy)
faqListingc                 
   |j                   j                  dd      }	 t        j                  j	                  d      j                  d      }g }|D ]7  }|j                  |j                  |j                  d}|j                  |       9 t        t        j                  |dk(  rdnd	|d
      S # t        $ rJ}t        |       t        t        j                  t!        |      dt        j                        cY d }~S d }~ww xY w)Nr,   r;   T)r?   r  )rx   r   contentr-   r|   r}   r  r:  r   )rN   rO   FaqrU   rV   r  rx   r   rE  r   r   r   rc   r   r)  r   r   )rd   re   rf   faq_objr  faqr   r   s           r&   rO   zfaqListing.get?  s    			.	5$4[[6??F78s66iiH
 OOH  $$ DLyi  
 
 48
771v 224 44s   BB/ /	D8?C=7D=DNr   rq   r(   r&   rC  rC  >  s    4r(   rC  c                       e Zd Zd Zy)getUserNotificationsc                    |j                   j                  dd      }	 	 t        |      }t        j                  j                  |      j                         }|s$t	        d|dk(  rdndit        j                        S t        j                  j                         j                         }|j                  d	k(  r/t	        |dk(  rd
nd|j                  dt        j                         S t"        j                  j                  |j$                        }g }|D ]  }	|	j$                  |	j&                  |	j(                  |	j*                  t-        |	j.                        dz   t1        j                  |	j.                        j3                  d|j                   j                  dd      j5                         v rdnd      d}
|j7                  |
        t	        t        j8                  |dk(  rdnd|d      S # t        $ r0}t	        dt        |      it        j                        cY d }~S d }~ww xY w# t        $ r?}t	        t        j:                  t        |      dt        j:                        cY d }~S d }~ww xY w)Nr,   r;   r$   r   r#  r-   r   r   Fz9Your account has been inactive. Please contact the admin.>Votre compte est inactif, veuillez contacter l'administrateur.r9  rB  r  r4   )locale)rx   r$   is_readr=  
start_daterO  zFetched successfullyu   Récupération réussier  r:  )rN   rO   r   r   r   r   r   r   rT   rU   rV   r[   r   r  r>  r0   r?  r(  rx   r$   rN  r=  r   rO  arrowhumanizerP   r   rc   r   )rd   re   rf   r   r   r  rA  
notify_objr  notifyr   s              r&   rO   zgetUserNotifications.get^  sQ   			.	5$(4N

 C oo$$$,2248
YDDL 0F_`io  jC  jC  D  D!!%%'--/9ooOSW[|K  bcoo ,,. .
 "))000E:8v99[[V../&899V../88PWP_P_PcPcduwyPz  QA  QA  QC  IC  IM8  NH OOH  $$)-%;T  9  NYA'0L0LMMNB 
 4
771v 224 44sU   G2 AH. >A)H. (D	H. 2	H+;%H& H+!H. &H++H. .	I674I1+I61I6Nr   rq   r(   r&   rJ  rJ  ]  s    *4r(   rJ  c                       e Zd Zd Zy)deleteUserNotificationsc                 n   |j                   j                  dd      }	 	 t        |      }t        j                  j                  |      j                         }|s$t	        d|dk(  rdndit        j                        S t        j                  j                         j                         }|j                  d	k(  r/t	        |dk(  rd
nd|j                  dt        j                         S |j"                  j                  d      }|s$t	        d|dk(  rdndit        j                        S t$        j                  j                  |      j                         }|s$t	        d|dk(  rdndit        j                        S |j'                          t	        t        j(                  |dk(  rdndd      S # t        $ r0}t	        dt        |      it        j                        cY d }~S d }~ww xY w# t        $ r?}t	        t        j*                  t        |      dt        j*                        cY d }~S d }~ww xY w)Nr,   r;   r$   r   r#  r-   r   r   Fz9Your account has been inactive, please contact the admin.rL  r9  notification_idznotification_id is requiredz(L'identifiant de notification est requiszNotification not foundzNotification introuvablezDeleted successfullyu   Supprimé avec succès)r  status_message)rN   rO   r   r   r   r   r   r   rT   rU   rV   r[   r   r  r>  r0   r?  r   r(  r  rc   r   )	rd   re   rf   r   r   r  rA  rW  not_objs	            r&   rl   zdeleteUserNotifications.post  s:   			.	5$SN

 C oo$$$,2248
YDDL 0F_`io  jC  jC  D  D!!%%'--/9ooOSW[|K  bboo ,,. .
 \\%%&78?
Y =S}~  HN  Ha  Ha  b  b&&---AGGI7
YDDL 8Nhirx  sL  sL  M  M
>>
6#5#5cgkocoI_  vN  O  P  P1  NYA'0L0LMMN2 
 S
6#H#H\_`a\bclr  mR  mR  S  SSsb   F0 AG, >A)G, (A G, )AG, =2G, 0	G)9%G$G)G, $G))G, ,	H454H/)H4/H4Nrm   rq   r(   r&   rU  rU    s    Sr(   rU  c                       e Zd Zd Zy)SendPaymentNotificationc                    |j                   j                  dd      }	 	 t        |      }t        j                  j                  |      j                         }|s$t	        d|dk(  rdndit        j                        S |j                  j                  d	      }|s$t	        d|dk(  rd
ndit        j                        S t        j                  j                  |      j                         }|s$t	        d|dk(  rdndit        j                        S t        j                  j                  ||dk(  r|j                    dn|j                    d      }t	        t        j"                  |dk(  rdndd      S # t        $ r0}t	        dt        |      it        j                        cY d }~S d }~ww xY w# t        $ r?}t	        t        j$                  t        |      dt        j$                        cY d }~S d }~ww xY w)Nr,   r;   r$   r   r#  r-   r   r   rX  zsender_id is requiredu)   L'identifiant de l'expéditeur est requiszSender user not foundu#   Utilisateur expéditeur introuvablez- has sent a payment request for your booking.u;    a envoyé une demande de paiement pour votre réservation.r&  zRequest sent successfullyu   Demande envoyée avec succèsr  )rN   rO   r   r   r   r   r   r   rT   rU   rV   r[   r   r   r(  r_   r/   rc   r   )	rd   re   rf   r   r   r  r   get_usercreate_notifications	            r&   rl   zSendPaymentNotification.post  s%   			.	5$LN

 C oo$$$,2248
YDDL 0F_`io  jC  jC  D  D\\k*7
Y44< 7Mxy  CI  C\  C\  ]  ]oo$$$06688
Y44< 7Mrs  }C  }V  }V  W  W*2299	TX\`T`x!!""OPiqi{i{h|  }x  gy : 
 6#5#5aeimamB]  tS  T  U  U)  NYA'0L0LMMN, 
 L
6#H#HUXYZU[\ek  fK  fK  L  LLs\   E8 AF4 >A F4 ?AF4 A$F4 8	F1%F,&F1'F4 ,F11F4 4	G<=4G71G<7G<Nrm   rq   r(   r&   r[  r[    s    Lr(   r[  c                       e Zd Zd Zy)	MyRatingsc                    |j                   j                  dd      }	 	 t        |      }t        j                  j                  |      j                         }|s$t	        d|dk(  rdndit        j                        S |j                  j                  d	      }|s$t	        d|dk(  rd
ndit        j                        S t        j                  j                  |      j                         }|s$t	        d|dk(  rdndit        j                        S |j                  |j                   d}t	        t        j"                  |dk(  rdnd|d      S # t        $ r0}t	        dt        |      it        j                        cY d }~S d }~ww xY w# t        $ r?}t	        t        j$                  t        |      dt        j$                        cY d }~S d }~ww xY w)Nr,   r;   r$   r   r#  r-   r   r   rf  rg  z&L'identifiant de la demande est requiszRequest not foundzDemande introuvable)r`  r  z&Rating and review fetched successfullyu-   Évaluation et avis récupérés avec succès)r  r$   r   r  )rN   rO   r   r   r   r   r   r   rT   rU   rV   r[   r   r   r   r`  r  rc   r   )	rd   re   rf   r   r   r  rf  get_requestr  s	            r&   rO   zMyRatings.get  s   			.	5$LN

 C oo$$$,2248
YDDL 0F_`io  jC  jC  D  D-:
YDDL 8Nvw  AG  AZ  AZ  [  ["**11Z1@FFH;
Ytt| 3I^_hn  iB  iB  C  C     7
 %%;?4<7M|  )  NYA'0L0LMMN2 
 L
6#H#HUXYZU[\ek  fK  fK  L  LLs[   E AF >A F ?AF <F 	F	%F>F	?F F		F 	G4G	GGNr   rq   r(   r&   r`  r`    s    Lr(   r`  )NNN)   )irest_framework.viewsr   rest_framework.responser   rest_frameworkr   django.confr   adminapi.functionsadminapi.modelsuserapi.modelsrest_framework_simplejwt.tokensr	   passlib.hashr
   rY   django.template.loaderr   django.corer   mathr]   pytzr/  userapi.authenticationr  django.db.modelsr   twilio.jwt.access_token.grantsr   r   r   twilio.restr   twilio.jwt.access_tokenr   django.utils.timesincer   firebase_adminr   TWILIO_ACCOUNT_SIDr  TWILIO_AUTH_TOKEN
auth_tokenTWILIO_CHAT_SIDr  TWILIO_SYNC_SIDsync_service_sidTWILIO_API_SIDr  TWILIO_API_SECRETr  r  r'   r*   rs   modelsrT   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  utilsr/  r@  rP  decimalro  rq  r  r  r  r  r  jwtr  r  r  r  django.views.genericr  django.shortcutsr  r  r'  r5  r7  rC  rP  rJ  rU  r[  r`  rq   r(   r&   <module>r     s   ) , ! ! !   8 8 3  ! ! $     
  / , $((''
++ ++ 

!
!&&
	Z	(6d&w d&Th=' h=X ) , ! 8 C=g C=L:= :=z{= {=~@4W @4J%= %=R+= +=\   ( , ! . .	a&w a&JZ=w Z=zDT' DTP D7 DFQK' QKlEK' EKR ) , !     ( , !   ddw ddP6V' 6Vt$V' $VRVW VH P g P j -4' -4JF4g F4TGV' GVb(VW (V` . #5| 55 5B94' 94B4 48 +47 +4^ Sg  SLLg LB L  Lr(   