
    Oh&                     :   d dl mZ d dlmZ d dlmZ d dl d dlmZ d dl	m
Z
 d dlmZ d dlmZ d d	lmZ d d
lZd d
lZd d
lZd d
lZd dlmZ d d
lZd dl d dlmZ d dlmZ d dl d'd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"Z"d dl#m$Z$ d d
l"Z"d dl#m$Z$ d d
l%Z% G d de      Z& G d de      Z' G d de      Z( G d d e      Z)d d
l*Z* e*jV                  e,      Z- G d! d"e      Z. G d# d$e      Z/ G d% d&e      Z0y
)(    )APIView)Responsestatus)*)settings)RefreshToken)django_pbkdf2_sha256)render_to_string)mailN)datetime)	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	            </var/www/html/Kila-kolis-project/Kolis/travellerapi/views.pysend_push_notificationr!      s    ":,| #K 0,}!)n,{ %%	 	#| NN7#    c                       e Zd Zd Zy)AddTravellerc                    |j                   j                  dd      fd}	 	 t        |      }t        j                  j                  d|      j                         }|s3t	         |dd	      t        j                  dt        j                        S |j                  }|j                  d
      }|j                  d      }|j                  d      }	|	r|	j                  d      sd|	 }	|j                  d      }
|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|s3t	         |d d!      t        j                  dt        j                        S |	s3t	         |d"d#      t        j                  dt        j                        S |s3t	         |d$d%      t        j                  dt        j                        S |s3t	         |d&d'      t        j                  dt        j                        S |s3t	         |d(d)      t        j                  dt        j                        S |s3t	         |d*d+      t        j                  dt        j                        S |s3t	         |d,d-      t        j                  dt        j                        S |s3t	         |d.d/      t        j                  dt        j                        S |s3t	         |d0d1      t        j                  dt        j                        S |s3t	         |d2d3      t        j                  dt        j                        S |s3t	         |d4d5      t        j                  dt        j                        S |s3t	         |d6d7      t        j                  dt        j                        S |s3t	         |d8d9      t        j                  dt        j                        S |s3t	         |d:d;      t        j                  dt        j                        S |s3t	         |d<d=      t        j                  dt        j                        S |s3t	         |d>d?      t        j                  dt        j                        S |s3t	         |d@dA      t        j                  dt        j                        S |s3t	         |dBdC      t        j                  dt        j                        S t         j                  j                  |||||||||||
D      }|j#                         r3t	         |dEdF      t        j                  dt        j                        S t         j                  j%                  |||	|||||||||||||dG||||
||H       t	         |dIdJ      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	        t        |      t        j(                  dt        j(                        cY d }~S d }~ww xY w)KNAccept-Languagefrc                     dk(  r| S |S Nen )r*   r'   langs     r    msgzAddTraveller.post.<locals>.msg5   s    "$"$r"   r   
statusCoder   Tend_date__isnullidUser not found   Utilisateur non trouvéname	image_urlcountry_code+country_name_codephone_numbertravelling_fromtravelling_todeparture_datedeparture_timearrival_datearrival_timetransport_modeprice_per_kgdescriptioncitycountrylatitude	longitudetotal_capacitysender_countrysender_cityzName is requiredzLe nom est requiszCountry code is requiredzLe code du pays est requiszPhone number is requiredu$   Le numéro de téléphone est requiszTravelling from is requiredu   Le lieu de départ est requiszTravelling to is requiredzLa destination est requisezDeparture date is requiredu   La date de départ est requisezDeparture time is requiredu   L'heure de départ est requisezArrival date is requiredu   La date d'arrivée est requisezArrival time is requiredu   L'heure d'arrivée est requisezTransport mode is requiredzLe mode de transport est requiszPrice per kg is requiredzVeuillez entrer le prix par kgzDescription is requiredzLa description est requisezImage is requiredzL'image est requisezCity is requiredzLa ville est requisezCountry is requiredzLe pays est requiszLatitude is requiredzLa latitude est requisezLongitude is requiredzLa longitude est requisezTotal capacity is requiredu   La capacité totale est requise)userr;   r<   r=   r>   r?   r@   rF   rG   rH   r9   z This travel route already exists'   Cet itinéraire de voyage existe déjàactive)rK   r5   r7   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   r6   rD   rE   travel_statusrF   rG   rH   r9   rI   rJ   zTraveler added successfullyu   Voyageur ajouté avec succès)headersgetauthenticated	Exceptionr   r   r   HTTP_401_UNAUTHORIZEDAppUserobjectsfilterfirstHTTP_404_NOT_FOUNDr   
startswithHTTP_400_BAD_REQUEST	AddTravelexistscreateHTTP_200_OKHTTP_500_INTERNAL_SERVER_ERROR)selfrequestr-   uideapp_user_objr   r5   r6   r7   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   check_travelr,   s                                @r    postzAddTraveller.post2   s   			.	5$%xKz

 C //(($3(GMMO<
$46O P`f`y`yz  DJ  D]  D]  ^  ^
,,4
((6
4xx$9((>*<<2237|n%Lxx 34((>*<XX/0?88O,=HH-.>HH-.>((>*<((>*<HH-.>((>*<-(;
((6
4XXi 7hhz"8xx$9HH-.>HH-.>-(; $68K L\b\w\wx  BH  B]  B]  ^  ^
$>@\ ]ms  nI  nI  J  SY  Sn  Sn  o  o
$>@f gw}  xS  xS  T  ]c  ]x  ]x  y  y
$ACb csy  tO  tO  P  Y_  Yt  Yt  u  u
$?A] ^nt  oJ  oJ  K  TZ  To  To  p  p
$@Bb csy  tO  tO  P  Y_  Yt  Yt  u  u
$@Bb csy  tO  tO  P  Y_  Yt  Yt  u  u
$>@` aqw  rM  rM  N  W]  Wr  Wr  s  s
$>@` aqw  rM  rM  N  W]  Wr  Wr  s  s
$@Bc dtz  uP  uP  Q  Z`  Zu  Zu  v  v
$>@` aqw  rM  rM  N  W]  Wr  Wr  s  s
$=?[ \lr  mH  mH  I  RX  Rm  Rm  n  n
$79N O_e_z_z{  EK  E`  E`  a  a
$68N O_e_z_z{  EK  E`  E`  a  a
$9;O P`f`{`{|  FL  Fa  Fa  b  b
$:<U Vfl  gB  gB  C  LR  Lg  Lg  h  h
$;=W Xhn  iD  iD  E  NT  Ni  Ni  j  j
$@Bc dtz  uP  uP  Q  Z`  Zu  Zu  v  v##**	#!!!' + < $FHq r  CI  C^  C^  _  hn  hC  hC  D  D		#!!!	!'!/  4 s#@Babrx  sE  sE  F  OU  Oa  Oa  b  be  zAf6R6RS\b\x\xyyzh 
 K
s1vV5Z5Z[dj  eJ  eJ  K  KKs   Z- A#[8 F=[8 4[8 4[8 <4[8 14[8 &4[8 4[8 4[8 4[8 :4[8 /4[8 $4[8 4[8 4[8 4[8 84[8 -4[8 "4[8 A,[8 A([8 -	[564[0*[5+[8 0[55[8 8	] 4\;5] ;] N__name__
__module____qualname__rf   r+   r"   r    r$   r$   1   s	    ~Kr"   r$   c                       e Zd Zd Zy)UserTravellerListingc           	      Z   |j                   j                  dd      }	 	 t        |      }|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 t        j                  j                  ||d
      j!                  d      }t#        |j%                               }	 t'        |j                  j                  dd            }	t'        |j                  j                  dd            }
t+        |      }|	dz
  |
z  }||
z   }||| }t	        |dk(  rdnd||	|
|t        j,                  dt        j,                        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# t(        $ r6 t	        |dk(  rdndt        j                  dt        j                        cY S w xY w# t        $ rF}t	        |dk(  rt        |      ndt        j.                  dt        j.                        cY d }~S d }~ww xY w)Nr&   r'   r*      Non autorisér.   r   r   zStatus parameter is requiredu!   Le paramètre "status" est requisTr0   zAppUser not found#   L'utilisateur n'a pas été trouvé)rK   rN   r1   z-departure_datepage   	page_size
   Invalid page or page_sizeu-   Paramètre de page ou taille de page invalideSuccess   Succèsr   total_countrp   rr   all_datar/   Erreur du serveur interne)rO   rP   rQ   rR   r   r   r   rS   GETrZ   rT   rU   rV   rW   rX   r[   order_bylistvaluesint
ValueErrorlenr^   r_   )r`   ra   r,   rb   rc   rN   rd   filter_querysetry   rp   rr   rx   startendpaginated_datas                  r    rP   zUserTravellerListing.get   s   ""#4d;;	=8#G, $KKOOH5M AE=Sv"("="=! !557 7
 #??114C1PVVXL6:dl2Hm"(";";! !335 5
 (//66!+!% 7  h()	  O2245H77;;??6156R @A	 h-KAX*E)#C%eC0N(,9)*&*$00 ((* *U  8)-s1v?"(">">! !668 88>  7>Bdl:P"("="=! !557 77(  	=%)T\3q67R$CC ;;= =	=s{   G AI :A#I A
I )A
H 3AI 	H;HHI HI <II II 	J*$;J%J*%J*Nrh   ri   rj   rP   r+   r"   r    rl   rl      s    >=r"   rl   c                       e Zd Zd Zy)TravellerDetailsc                    |j                   j                  dd      }	 	 t        |      }|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 t        j                  j                  |d
      j                         }t	        |dk(  rdnd|r|d   ni t        j                   dt        j                         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# t        $ rF}t	        |dk(  rt        |      ndt        j"                  dt        j"                        cY d }~S d }~ww xY w)Nr&   r'   r*   rn   r.   r   	travel_idtravel_id not foundtravel_id introuvableTr0   r3   ro   r2   r1   ru   rv   r   )r   ry   r/   rz   )rO   rP   rQ   rR   r   r   r   rS   r{   rX   rT   rU   rV   rW   r[   r~   r^   r_   )r`   ra   r,   rb   rc   r   rd   
filter_objs           r    rP   zTravellerDetails.get   s   ""#4d;%	=8#G,  4I8<4Ja"(";";! !335 5
 #??114C1PVVXL374</Ej"(";";! !335 5
 #**11t 2 fh  (,9)-7JqMR$00 ((	* *1  8)-s1v?"(">">! !668 88<  	=%)T\3q67R$CC ;;= =	=sU   E AF :A#F A)F 	F;FFF FF 	G)#;G$G)$G)Nr   r+   r"   r    r   r      s    (=r"   r   c                       e Zd Zd Zy)TravellerUpdatec                 P   |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      }|s5|dk(  rdnd}t        |t        j                  dt        j                        S t        j                  j                  |d      j                         }|s5|dk(  rdnd}t        |t        j                  dt        j                        S |j                  }	|	j                  d      }
|
r|
j                  d      sd|
 }
t         j                  j                  |ddg      }|j#                         r5|dk(  rdnd}t        |t        j$                  dt        j$                        S |	j                  d      |	j                  d      |_        |	j                  d      |	j                  d      |_        |
|
|_        |	j                  d      |	j                  d      |_        |	j                  d      |	j                  d      |_        |	j                  d      |	j                  d      |_        |	j                  d      |	j                  d      |_        |	j                  d      |	j                  d      |_        |	j                  d      |	j                  d      |_        |	j                  d       |	j                  d       |_        |	j                  d!      |	j                  d!      |_        |	j                  d"      |	j                  d"      |_        |	j                  d#      |	j                  d#      |_        |	j                  d$      |	j                  d$      |_         |	j                  d%      |	j                  d%      |_!        |	j                  d&      |	j                  d&      |_"        |	j                  d'      |	j                  d'      |_#        |	j                  d(      |	j                  d(      |_$        |	j                  d)      |	j                  d)      |_%        	 |jM                          |dk(  rd,nd-}t        |t        jN                  dt        jN                        S # t        $ rH}|dk(  rt	        |      nd}t        |t        j                  dt        j                        cY d }~S d }~ww xY w# t        $ rW}|dk(  rd*t	        |       nd+t	        |       }t        |t        j                  dt        j                        cY d }~S d }~ww xY w).Nr&   r'   r*   rn   r.   r   Tr0   r3   ro   r   r   r   r   zTravel record not foundz$Enregistrement de voyage introuvabler7   r8   pendingaccepted)routereq_status__inz)This travel route of yours already existsrL   r5   r6   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   r9   rH   rF   rG   zUpdate failed: u   Échec de la mise à jour: z%Traveler details updated successfullyu-   Détails du voyageur mis à jour avec succès)(rO   rP   rQ   rR   r   r   r   rS   rT   rU   rV   rW   rX   r   r[   rY   TravellerRequestsr\   rZ   r5   r6   r7   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   r9   rH   rF   rG   saver^   )r`   ra   r,   rb   rc   r   rd   r   r   r   r7   check_requests               r    rf   zTravellerUpdate.post#  s   ""#4d;	C(C
 --t-LRRT*.$,&<aGv?X?XYbhb{b{||LL$$[1	/3t|+AXGv?X?XYbhb{b{||&&--T-RXXZ
374</EkGv?X?XYbhb{b{||||xx/ 7 7 <|n-L)1188z[dfpZq8r!EIT\A  XAGv?Z?Z[djdd  A  A 88F'"hhv.JO88K ,#'88K#8J #&2J#88N#/&*hh~&>J#88%&2)-2C)DJ&88O$0'+xx'@J$88$%1(,1A(BJ%88$%1(,1A(BJ%88N#/&*hh~&>J#88N#/&*hh~&>J#88$%1(,1A(BJ%88N#/&*hh~&>J#88M".%)XXm%<J"88F'"hhv.JO88I*!%)!4J88'(4+/884G+HJ(88$%1(,1A(BJ%88J+"&((:"6J88K ,#'88K#8J 	}OO
 >BT\9O~G6;M;MNW]WiWijj[  	C $c!f/Gv?[?[\ek  fB  fB  C  C	CP  	}48DLAx0HcdghidjckFlGv?X?XYbhb{b{||	}s<   S1 ,U 1	U:=T=7U=U	V%AV V% V%Nrg   r+   r"   r    r   r   "  s	    Rkr"   r   c                       e Zd Zd Zy)TravellerDeletec                    |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      }|s5|dk(  rdnd}t        |t        j                  dt        j                        S t        j                  j                  |      j                         }|r)t        j                          |_        |j%                          |dk(  rdnd}t        |t        j&                  dt        j&                        S # t        $ rH}|dk(  rt	        |      nd}t        |t        j                  dt        j                        cY d }~S d }~ww xY w)Nr&   r'   r*   rn   r.   r   Tr0   r3   ro   r   zTravel ID not foundu!   Identifiant de voyage non trouvér2   zDeleted successfullyu   Supprimé avec succès)rO   rP   rQ   rR   r   r   r   rS   rT   rU   rV   rW   rX   r   r[   r   nowend_dater   r^   )	r`   ra   r,   rb   rc   r   rd   r   r   s	            r    rf   zTravellerDelete.postz  s   ""#4d;	C(C
 --t-LRRT*.$,&<aGv?X?XYbhb{b{||LL$$[1	/3t|+AdGv?X?XYbhb{b{||&&---;AAC
"*,,.JOO,0DL(>VG6;M;MNW]WiWijj+  	C $c!f/Gv?[?[\ek  fB  fB  C  C	Cs   E/ /	G 8=F;5G ;G Nrg   r+   r"   r    r   r   y  s    kr"   r   )timezonec                       e Zd Zd Zy)TravellerRequestListingsc                 t
   |j                   j                  dd      fd}	 t        |      }t        j                  j                  d|	      j                         }|s3t	         |d
d      t
        j                  dt
        j                        S |j                  j                  d      }|dk(  r5t        j                  j                  |ddg      j                  ddd      }n4t        j                  j                  |g d      j                  ddd      }g }t        j                          }|D ]  }	|j#                  i d|	j$                  d|	j&                  j$                  d|	j&                  j(                  d|	j&                  j*                  d|	j&                  j,                  d|	j.                  j$                  d|	j.                  j*                  d|	j.                  j,                  d|	j0                  j$                  d|	j0                  j2                  d|	j0                  j4                  d|	j0                  j6                  d |	j0                  j8                  d!|	j0                  j:                  d"|	j0                  j<                  d#|	j0                  j>                  d$|	j0                  j@                  i d%|	j0                  jB                  d&|	j&                  jD                  d'|	j&                  jF                  d(|	jH                  d)|	jJ                  d*|	jL                  d+|	jN                  d,tQ        j                  |	jR                        jU                  d|j                   j                  dd-      jW                         v rdnd./      d0|	jX                  d1|	jZ                  d2|	j\                  d3|	j^                  d4|	j`                  d5|	jb                  d6|	jd                  d7|	jf                  d8|	jh                          	 tk        |jl                  j                  d9d:            }
tk        |jl                  j                  d;d<            }ts        |      }|
d:z
  |z  }||z   }||| }t	         |d?d@      ||
||t
        jt                  dAt
        jt                        S # t        $ r6 t	         |dd      t
        j                  dt
        j                        cY S w xY w# tn        $ r6 t	         |d=d>      t
        jp                  dt
        jp                        cY S w xY w)BNr&   r'   c                     dk(  r| S |S r)   r+   )en_textfr_textr,   s     r    r-   z)TravellerRequestListings.get.<locals>.msg  s    "dl777r"   Unauthorizedrn   r.   r   Tr0   r3   ro   r   	completedrejected)	travellerr   senderr   r   )r   r   Pickedr2   	sender_idsender_imagesender_full_namesender_emailtraveller_idtraveller_full_nametraveller_emailroute_idr5   r6   r=   r>   rB   r?   r@   r;   r<   sender_phone_numbersender_country_codeparcel_drop_off_addressreceipient_countryreceipient_city
req_statusrequest_time r*   )localerecepient_emailrecepient_namerecepient_phone_numberrI   rJ   weight_parcelparcel_descriptionpayment_statusrecepient_country_coderp   rq   rr   rs   rt   zPage ou taille de page invalideru   rv   rw   );rO   rP   rQ   rR   r   r   rS   rT   rU   rV   rW   rX   r{   r   select_relatedr   r   appendr2   r   image	full_nameemailr   r   r5   r6   r=   r>   rB   r?   r@   r;   r<   r:   r7   r   rE   rD   r   arrow
created_athumanizelowerr   r   r   rI   rJ   r   r   r   r   r   query_paramsr   rZ   r   r^   )r`   ra   r-   rb   rd   order_statusquerysetry   r   r   rp   rr   rx   r   r   r   r,   s                   @r    rP   zTravellerRequestListings.get  s   ""#4d;	8	`(C --t-LRRT,<>c(dtz  uN  uN  O  X^  Xq  Xq  r  r{{x0 ;&(0077& +Z8 8  nXw< 
 )0077&@ 8  nXw< 
 llnDOO $dgg$T[[^^$  1 1$ #DKK$9$9	$
  1 1$  1 1$ &t~~'?'?$ "4>>#7#7$ DJJMM$ 

$ TZZ11$ !$**";";$ !$**";";$ 

 7 7$ 

 7 7$  

 7 7!$" "4::#=#=#$$  !9!9%$& &t{{'?'?'$( &t{{'?'?)$* *4+G+G+$, %dll-$. "499/$0 doo1$2 		$// : C CSW[b[j[j[n[n  pA  CE  \F  \L  \L  \N  TN4  TX C  !Y3$6 "4#7#77$8 !$"5"59$: )$*E*E;$< !$"5"5=$> t//?$@  !3!3A$B %d&=&=C$D !$"5"5E$F )$*E*EG$ $ P	}w++//:;DG0044["EFI (mY&i!%,9i0&"& ,,
 $$& 	&W  	`NO(L\b\x\xy  CI  C_  C_  `  `	`F  	},GIj(k  |B  |W  |W  X  ag  a|  a|  }  }	}s$   R6 A
S8 6<S54S58<T76T7Nr   r+   r"   r    r   r     s    [&r"   r   c                       e Zd Zd Zy)AcceptRejectRequestsc                    	 |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      }|j                  d      }t        j                  j                  |      j                         }	|	r||	_        |	j                          |dk(  r+d|	j                   _        |	j                   j                          	 |j$                  r(t'        |	j(                  j$                  d| d| d       t,        j                  j/                  |	j(                  |dk(  rd| d|	j0                  j2                   nd| d|	j0                  j2                          t	        |dk(  rd| dnd| dt
        j4                  dt
        j4                        S # t        $ r=}t	        |dk(  rdnd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	        dk(  rdndt
        j6                  dt
        j6                        cY d }~S d }~ww xY w)Nr&   r*   r   rn   r.   r   Tr0   r3   ro   
request_idr   r   r   zRequest zYour request has been .Notification failed: zYour travel request has been z by u    Votre demande de voyage a été z par rK   r   z successfullyu	   Requête u    avec succèsInternal Server Errorrz   )rO   rP   rQ   rR   r   r   rS   rT   rU   rV   rW   rX   r   r   r   r   r   editable	fcm_tokenr!   r   printUserNotificationsr]   r   r   r^   r_   )
r`   ra   r,   rb   rc   rd   r   r   r   filter_datas
             r    rf   zAcceptRejectRequests.post  s   F4
//

/
64,

 C //(($3(GMMO<
$(DL 6[,, '') )
 ,,4&:":"**11Z1@FFH;'KJ!%K'""zl!, ##			 	 %ZL[5J5J5T5T4UV,ZLk>S>S>]>]=^
_ $   	 
|=)j\
/$$ ! !i  ,"&$,O// **, ,,P  '	!!
%&&'* 
 4
*.$,&<W77 224 44s~   I7 H	 A#I7 B%I7 44I (B I7 		I2I
II7 
II7 	I4I/)I7 /I44I7 7	J= 2J82J=8J=Nrg   r+   r"   r    r   r      s    G4r"   r   c                       e Zd Zd Zy)DeleteRoutec                 B   	 |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                  |      j                         }|s3t	        |dk(  rdndt
        j                  dt
        j                        S t        j                          |_        t%        |j&                         |j)                          t*        j                  j                  |j&                  j,                        j                         }	|	rd|	_        |	j)                          t	        |dk(  rdndt
        j0                  dt
        j0                        S # t        $ r=}t	        |dk(  rdndt
        j                  dt
        j                        cY d }~S d }~ww xY w# t        $ r=}t	        dk(  rdndt
        j2                  dt
        j2                        cY d }~S d }~ww xY w)Nr&   r*   r   rn   r.   r   Tr0   r3   ro   r   zroute_id is requiredu)   L'identifiant de l'itinéraire est requisr   zRoute not foundu   Itinéraire non trouvér   zRoute deleted successfullyu"   Itinéraire supprimé avec succèsr   rz   )rO   rP   rQ   rR   r   r   rS   rT   rU   rV   rW   rX   r   rZ   MyRouter   r   r   r   requestsr   r   r2   r   r^   r_   )
r`   ra   r,   rb   rc   rK   r   r   check_router   s
             r    rf   zDeleteRoute.postN  sY   34
//

/
64,

 C //
 
 $3
 
?
E
E
G4
$(DL 6[,, '') )
 ,,4hhz"8
*.$,&<g.. ))+ +
 ''8'4::<;
%)T\!7P,, '') )
 #,,.;		"**11[5I5I5L5L1MSSU;&K
/3t|+Ae$$ ! !K  ,"&$,O// **, ,,T 
 4
*.$,&<W77 224 44sa   I H A#I AI  A"I CI 	I2I
II II 	J!2JJJNrg   r+   r"   r    r   r   M  s    44r"   r   c                       e Zd Zd Zy)RouteStatusc                 |   |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      }|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        j                  j                  |      j                         }	|	s3t	        |dk(  rdndt
        j                  dt
        j                        S ||	_        ||	_        |	j#                          t$        j                  j                  |	      j                         }
|
r||
_        ||
_        t)        |
j*                  j,                  j.                        t)        |
j*                  j0                        z
  |
j*                  j,                  _        |
j#                          |dk(  rt3        j4                  ddd      }||	_        |	j#                          |dk(  rdnd}t9        dd|i      }|}t:        j<                  }|	j>                  }	 tA        jB                  ||||g|       t	        |dk(  rd"nd#t
        jH                  dt
        jH                        S # t        $ r.}t	        d|dk(  rdndit
        j                        cY d }~S d }~ww xY w# t        $ rH}tE        |       t	        |dk(  rd nd!t
        jF                  dt
        jF                        cY d }~S d }~ww xY w)$Nr&   r*   r   r   rn   r   Tr0   r3   r4   r.   r   r   r6   request_id is required&L'identifiant de la demande est requiszstatus is requiredzLe statut est requisr   zTraveller request not foundzDemande de voyageur introuvable)r   r   i  i'     zAccount Verificationu   Vérification du comptezemail_verification.htmlotp)html_messagez>Failed to send the verification email. Please try again later.uN   Échec de l'envoi de l'e-mail de vérification. Veuillez réessayer plus tard.zParcel picked up successfullyu   Colis récupéré avec succès)%rO   rP   rQ   rR   r   r   rS   rT   rU   rV   rW   rX   r   rZ   r   r   pickup_imager   r   r   r   r   r   rH   r   random	randranger   r   r   EMAIL_HOST_USERr   r   	send_mailr   r_   r^   )r`   ra   r,   rb   rc   rK   r   
get_statusr   r   r   the_otpsubjectr   plain_message
from_emailtoemail_errors                     r    rf   zRouteStatus.post  sf   			.	5$+	w	3 
		#		>	D	D	F$	
#'4<5N++ &&( (
 ||-*||)*!!+.,	
+/4<'=e-- ((* *
 

'+t|#9O-- ((* *
 "))00J0?EEG+	
04,Bc++ &&( (
 &+)+
//
 
 +
 
6
<
<
>%
"5$5),U^^-A-A-P-P)QTWX]XfXfXtXtTu)u5>>&::<8dD!,7;?'+t|#9R7"#<ug>NO<=((:##25NN7M:t,W 
15-Cc## 
   G 
 +
~?))+ ++v  5	+TX\`T`P
Z88 33	5 55s;   L0 "M* 0	M'9#M"M'"M'*	N;3=N60N;6N;Nrg   r+   r"   r    r   r     s    K r"   r   c                       e Zd Zd Zy)RouteOtpVerificationc                    |j                   j                  dd      }	 |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                  ||      j                         }|rd|_
        ||_        |j                          d|j                  _        |j                  j                          |j                  }|rt        j                  j                  |      j!                         }	t        j                  j                  |d      j!                         }
|	dkD  r|
|	z  dz  nd}|
|_        t%        |d      |_        |j                          	 |j(                  }|rM|j*                  rAt-        |j*                  |dk(  rdnd|dk(  rd|j.                   dnd|j.                   d       t0        j                  j3                  ||dk(  rd|j.                   nd|j.                          t        |dk(  rdndt        j8                  dt        j8                  	      S t        |dk(  rdndt        j
                  dt        j
                  	      S # t4        $ r}t7        d|        Y d }~d }~ww xY w# t4        $ r\}t:        j=                  d        t        |dk(  rd!nd"t?        |      t        j@                  d#t        j@                  	      cY d }~S d }~ww xY w)$Nr&   r*   r   r   r6   r   r   r.   r   zOTP is requiredzLe code OTP est requis)r2   r   r   F)r   )r   r   r   d   g           zDelivery Completedu   Livraison terminéez)Your route request has been completed by r   u0   Votre demande de trajet a été complétée par r   r   zParcel verified successfullyu   Colis vérifié avec succèszInvalid OTPzCode OTP invalidez(Unexpected error in RouteOtpVerificationInternal server errorErreur interne du serveurr   detailsr/   )!rO   rP   r   r   r   rZ   r   rU   rV   rW   r   dropoff_imager   r   r   r   countcompleted_routesroundis_route_percentager   r   r!   r   r   r]   rR   r   r^   logger	exceptionr   r_   )r`   ra   r,   r   r   r   r   request_objr   total_requestscompleted_requestscompleted_percentageuser_to_notifyrc   s                 r    rf   zRouteOtpVerification.post  s]   			.	5$\
,,4&:	%388K(=
-1T\)?g// ''  &*dl"8P// ''  #**11ZS1IOOQ;(K -K!&K %%I'//666KQQS^+33::k ; uw  LZ\]K]/.@CGcf"4Y%*+?%CY"^^(!((^>33#t|1FMQUY\	293F3F2GqI>y?R?R>SSTU	 %% $, 
393F3F2GH>y?R?R>ST &  374</Ec&&   "&$,4G// ''   (
"1#&''(& 
 		>?
+/4<'=XA88
 00 	s]   A3L 4L DL %BK( 2L 52L (	L	1L?L L		L 	M1AM,&M1,M1Nrg   r+   r"   r    r   r     s    _r"   r   c                       e Zd Zd Zd Zy)AddBankDetailsc                     |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                  |j                  |j                   d
}t	        |dk(  rdndt        j"                  |dt        j"                        S # t        $ r0}t	        dt        |      it        j                        cY d }~S d }~ww xY w# t        $ rG}t	        |dk(  rdndt        |      t        j$                  dt        j$                        cY d }~S d }~ww xY w)Nr&   r*   r   r   Tr0   r3   r4   r.   )bank_account_namebank_account_number	bank_namebank_ifsc_codez!Bank details fetched successfullyu,   Détails bancaires récupérés avec succès)r   r/   ry   r   r   r   )rO   rP   rQ   rR   r   r   r   rS   rT   rU   rV   rW   rX   r  r  r  r  r^   r_   )r`   ra   r,   rb   rc   rK   r   s          r    rP   zAddBankDetails.get@  sf   			.	5$4N

 C //
 
 $3
 
?
E
E
G4
$(DL 6O,, '') ) //33))	4 6:dl2Hv$$ 	! !#  NYA'0L0LMMN. 
 4
*.$,&<W1v77 22	4 44sN   C1 A#D- A"D- 1	D*:%D%D* D- %D**D- -	E=6<E82E=8E=c                 x   |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
      }|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 |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 ||_        ||_        ||_        |	|_        |j'                          t	        |dk(  rdndt        j(                  d	t        j(                        S # t        $ r0}t	        dt        |      it        j                        cY d }~S d }~ww xY w# t        $ rG}t	        |dk(  rdndt        |      t        j*                  dt        j*                        cY d }~S d }~ww xY w)Nr&   r*   r   r   Tr0   r3   r4   r.   r  r  r  r  zAccount holder name is requiredz(Le nom du titulaire du compte est requiszBank account number is requiredu(   Le numéro de compte bancaire est requiszBank name is requiredzLe nom de la banque est requiszIFSC code is requiredzLe code IFSC est requiszBank details added successfullyu(   Détails bancaires ajoutés avec succèsr   r   r   )rO   rP   rQ   rR   r   r   r   rS   rT   rU   rV   rW   rX   r   rZ   r  r  r  r  r   r^   r_   )
r`   ra   r,   rb   rc   rK   r  r  r  r  s
             r    rf   zAddBankDetails.postd  s   			.	5$:4N

 C //
 
 $3
 
?
E
E
G4
$(DL 6O,, '') )
 ||''(;< ))*?@||,9LL$$%56>
59T\1Gq.. ))+ +
 59T\1Gq.. ))+ +
 +/4<'=].. ))+ +
 +/4<'=V.. ))+ +
 .4144>'499;
48DL0Fp$$ ! ![  NYA'0L0LMMNd 
 4
*.$,&<W1v77 22	4 44sg   H- A#I) B I) /4I) $4I) 4I) AI) -	I&6%I!I&I) !I&&I) )	J92<J4.J94J9Nrh   ri   rj   rP   rf   r+   r"   r    r  r  ?  s    "4H=4r"   r  c                       e Zd Zd Zd Zy)RequestedMoneyViewc                 V   |j                   j                  dd      }	 t        |      }t        j                  j                  |d      j                         }|s3t        |dk(  rdndt        j                  dt        j                        S t        j                  j                  |d	      j                  d
      }|D cg c]  }|j                  |dk(  r|j                  n|j                  |dk(  r|j                  n|j                  |dk(  r|j                  n|j                  |j                   |j"                  |dk(  r|j$                  n|j$                  d }}|dk(  rdnd|dk(  r|j&                  n|j&                  |dk(  r|j(                  n|j(                  |dk(  r|n|t        j*                  d}t        |t        j*                        S c c}w # t,        $ rG}	t        |dk(  rdndt/        |	      t        j0                  dt        j0                        cY d }	~	S d }	~	ww xY w)Nr&   r*   Tr   r3   r4   r.   r   )rK   r1   z-created_at)r2   requested_moneyavailable_balancetotal_balancer   
updated_attransaction_statusz$Requested money fetched successfullyu(   Argent demandé récupéré avec succès)r   total_earningtotal_withdrawalry   r/   r   r   r   )rO   rP   rQ   rT   rU   rV   rW   r   r   rX   RequestedMoneyr|   r2   r  r  r  r   r  r  r  total_withdrawlr^   rR   r   r_   )
r`   ra   r,   rb   rK   r  recordr   response_datarc   s
             r    rP   zRequestedMoneyView.get  s   			.	5$$4	w	3
//
 
 C$
 
?
E
E
G4
$(DL 6O,, '') )
 $++22t2T]]^kl? #$ # ))15v--6CYCY59T\11vG_G_-1T\V))v?S?S####7;t|&33IbIb #  $ :>5Ku+/4<T''T=O=O04,,$BVBV$$$= =););
<<%$( 
 4
*.$,&<W1v77 22	4 44s8   A.G 4G BGA6G G 	H(!<H#H(#H(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 |j                  }t        |      |kD  r3t        |dk(  rdndt        j                  dt        j                        S t        j                  j                  |t        |      |t        |      z
  ||dk(  rdnd      }|t        |      z
  |_        |j                   t        |      z   |_        |j#                          t$        j                  j                  |dk(  r|j&                   dn|j&                   d       t        |dk(  rdndt        j(                  dt        j(                        S # t*        $ rG}t        |dk(  rdndt-        |      t        j.                  dt        j.                        cY d }~S d }~ww xY w)Nr&   r*   Tr   r3   r4   r.   r   r  zRequested amount is requiredu   Le montant demandé est requisz4You do not have this amount available in your walletz=Vous n'avez pas ce montant disponible dans votre portefeuiller   z
en attente)rK   r  r  r  r  z requested a wallet payoutu/    a demandé un paiement depuis son portefeuille)r   z$Money request submitted successfullyu(   Demande d'argent effectuée avec succèsr   r   r   )rO   rP   rQ   rT   rU   rV   rW   r   r   rX   r   rZ   wallet_moneyr   r  r]   r   r   AdminNotificationsr   r^   rR   r   r_   )	r`   ra   r,   rb   rK   r  solde_disponiblerequested_objrc   s	            r    rf   zRequestedMoneyView.post  sc   			.	5$14	w	3
//
 
 C$
 
?
E
E
G4
$(DL 6O,, '') )
 \\%%&78?
26$,.Dd.. ))+ +
 ''	/--JNRV,F  ]\.. ))+ +
 "))00	(&_)=="$(DLyl 1 = (#o*>>4.._1EE499;$$=AT\t~~89RVR`R`Qa  bQ  PR %  9=5Ku$$ ! !
 
 4
*.$,&<W1v77 22	4 44s3   A.H AH AH *C3H 	I.'<I)#I.)I.Nr  r+   r"   r    r  r    s    '4T44r"   r  )NNN)1rest_framework.viewsr   rest_framework.responser   rest_frameworkr   userapi.modelsdjango.confr   rest_framework_simplejwt.tokensr	   passlib.hashr
   handlerdjango.template.loaderr   django.corer   mathr   pytzstringstripeuserapi.authenticationr   firebase_adminr   adminapi.modelsr!   r$   rl   r   r   r   r   django.utilsr   r   r   r   r   r   logging	getLoggerrh   r  r   r  r  r+   r"   r    <module>r<     s   ) , !    9 8 3  ! !    $  $ 2K7 KF?=7 ?=D)=w )=XSkg Sknkg k<  !  ! \&w \&@H47 H4Z54' 54tL ' L \ 			8	$`7 `Lb4W b4L_4 _4r"   