
^B                 @   s  d  d l  m Z d  d l m Z d  d l m Z d  d l m Z d  d l m	 Z	 m
 Z
 m Z d  d l Td  d l Z d  d l m Z d  d l Td  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l m Z d  d	 l m Z d  d
 l m Z d  d l m Z m Z d  d l Z d  d l m Z d  d l m  Z  d  d l! m" Z" m# Z# d  d l$ m% Z% Gd d   d e  Z& Gd d   d e  Z' Gd d   d e  Z( Gd d   d e  Z) Gd d   d e  Z* Gd d   d e  Z+ Gd d   d e  Z, Gd d   d e  Z- Gd  d!   d! e  Z. Gd" d#   d# e  Z/ Gd$ d%   d% e  Z0 Gd& d'   d' e  Z1 Gd( d)   d) e  Z2 Gd* d+   d+ e  Z3 d S),    )render)APIView)authenticate)Token)HttpResponseJsonResponseHttpResponseRedirect)*N)	timedelta)	send_mail)settings)TemplateViewView)BytesIO)Image)getunreadnotificationcountsendfcmnotification)make_passwordc               @   s   e  Z d  Z d d   Z d S)DriverUpdateCoordinatesc             O   s*  t  d  t  d | j  y| j j d  } | j j d  } | j j d  } | so t d d d d	 i  S| s t d d d d
 i  S| s t d d d d i  St j j d |  j   } | rt  | j  t	 j j d | j  j   } | rt
 j j d |  j   }	 |	 rt j j d |	  j   }
 |
 rZ| |
 _ | |
 _ |
 j   n% t j j d | d |	 d | d |  t d d d d i  St d d d d	 i  Sqt d d d d	 i  Sn t d d d d	 i  SWnE t k
 r%} z% t  |  t d d d d i  SWYd  d  } ~ Xn Xd  S)Nz



aazdata is  : session_tokenlatitude	longitudestatus_codei  status_messagezUser not logged inzPlease enter latitudezPlease enter longitudekeyiduserdriver   successi  zInternal Server Error)printPOSTgetr   r   objectsfilterfirstuser_idUserDriverModelDriverCoordinatesr   r   savecreate	Exception)selfrequestargskwargssession_token_valZlatitude_valZlongitude_val	token_objuser_obj
driver_objZdrivercoordinates_obje r6   K/home/development/Documents/Good_Delivery/GoodsDelivery/API_Driver/views.pypost   s@    
		%
zDriverUpdateCoordinates.postN)__name__
__module____qualname__r8   r6   r6   r6   r7   r      s   r   c               @   s   e  Z d  Z d d   Z d S)DriverChangePasswordc             O   s  t  d  t  d | j  y| j j d  } | j j d  } | j j d  } | so t d d d d	 i  S| s t d d d d
 i  S| s t d d d d i  St j j d |  j   } | rt  | j  t	 j j d | j  } | j
 |  rt  d  t |  | _ | j   t j j d |  j   }	 |	 ry t |	 j d d d d  Wn/ t k
 r}
 z t  |
  WYd  d  }
 ~
 Xn Xt d d d d i  St  d  t d d d d i  SWnE t k
 r}
 z% t  |
  t d d d d i  SWYd  d  }
 ~
 Xn Xd  S)Nz



aazdata is  : r   oldpasswordnewpasswordr   i  r   zUser not logged inzPlease enter old passwordzPlease enter new passwordr   r   zcorrect passwordr   r   passwordchangeKwickDeliveryz%Your password is updated successfullyr   r   zinvalid passwordzOld password is incorrecti  zInternal Server Error)r    r!   r"   r   r   r#   r$   r%   r&   r'   check_passwordr   passwordr*   r(   r   fcmtokenr,   )r-   r.   r/   r0   r1   oldpassword_valnewpassword_valr2   r3   r4   r5   r6   r6   r7   r8   E   s@    




zDriverChangePassword.postN)r9   r:   r;   r8   r6   r6   r6   r7   r<   C   s   r<   c               @   s   e  Z d  Z d d   Z d S)!DriverGetUnreadNotificationsCountc       	      O   s  t  d  y | j j d  } | s; t d d d d i  St j j d |  j   } | r t | j	  \ } } | d k r t  |  n | d	 k r t  |  t d d
 d | d d i  St d d d d i  SWnE t
 k
 r} z% t  |  t d d d d i  SWYd d } ~ Xn Xd S)z<This function shows the content on customer dashboard screenz+DriverGetUnreadNotificationsCount - in get r   r   i  r   zUser not logged inr   r   errorr   unread_notifications_counti  zInternal Server ErrorN)r    GETr"   r   r   r#   r$   r%   r   r&   r,   )	r-   r.   r/   r0   r1   r2   resultcountr5   r6   r6   r7   r"   o   s"    


z%DriverGetUnreadNotificationsCount.getN)r9   r:   r;   r"   r6   r6   r6   r7   rF   m   s   rF   c               @   s   e  Z d  Z d d   Z d S)DriverNotificationsc             O   s  t  d  ye| j j d  } | s; t d d d d i  St j j d |  j   } | rXt j j d | j	  j   } | r?g  } t
 j j d	 | d
 d  j d  } | r xQ | D]I }	 | j d |	 j d |	 j d |	 j d |	 j d |	 j d |	 j i  q Wt d d d | d d i  St d d d g  d d i  Sqnt d d d d i  Sn t d d d d i  SWnE t k
 r}
 z% t  |
  t d d d d i  SWYd d }
 ~
 Xn Xd S)z<This function shows the content on customer dashboard screenzDriverNotifications - in get r   r   i  r   zUser not logged inr   r   r   deletedFz-id	fordrivernotificationtypenotificationtextstatusdater   datar   i  zInternal Server ErrorN)r    rI   r"   r   r   r#   r$   r%   r'   r&   Notificationsorder_byappendr   rN   rO   rP   rQ   rR   r,   )r-   r.   r/   r0   r1   r2   r3   notifications_dataall_notificationsnotificationr5   r6   r6   r7   r"      s6    
$					
zDriverNotifications.getN)r9   r:   r;   r"   r6   r6   r6   r7   rL      s   rL   c               @   s   e  Z d  Z d d   Z d S)DriverCustomerJobDetailc          7   C   s  t  d | j  y>| j j d  } | j j d  } | j j d  } | se t d d d d i  S| s t d d d d	 i  S| s t d d d d
 i  Si  } t j j d |  j   } | r	t j j d | j	  j   } | r	t
 j j d |  j   } | r	t j j d |  j   }	 d }
 d } |	 rt  d  |	 j d k rq|	 j d k rqt  d  d }
 nk |	 j d k r|	 j d k rt  d  d }
 d } n4 |	 j d k r|	 j d k rt  d  d }
 d } t j j d |  j   } | r1| j sd } n	 | j } | j s*d } n	 | j } | j sEd } n t t j  | j j } | j d | j d | d | j d | j d | j d | j d | j d | d | j d | j d | j d | j  d  | j! d! | j" d" | j# j d# t$ | j% d$  d% d d& | d' d( d) d* d+ d, d- d. d/ |
 d0 | i  t d d1 d2 | d d3 i  SWnE t& k
 r} z% t  |  t d d4 d d5 i  SWYd6 d6 } ~ Xn Xd6 S)7z4 This API method is used to get profile data of userzdata is  : r   customerjobiddriverjobidr   i  r   zUser not logged inzCustomerJob id is requiredzDriverJob id is requiredr   r   r   Fifzif 2Telif 
sendernamesendercountrycodesenderphonesenderpickupaddress
sendercitynoofparcelsrecipientnamerecipientcountrycoderecipientphonerecipientdropoffaddresswidthheightweight
parceltypevehicletypefare   parcelpdf_linkqrcodesenderlatitudez	30.703448senderlongitudez	76.701383recipientlatitudez	28.457523recipientlongitudez	77.026344showscanbuttonshowhandovertorecipientbuttonr   rS   r   i  zInternal Server ErrorN)'r    rI   r"   r   r   r#   r$   r%   r'   r&   r(   	DriverJob
jobstartedjobcompletedCustomerJobra   rg   rr   strr   MEDIA_BASE_URLnameupdater`   rb   pickupaddressrd   re   rf   rh   dropoffaddressrj   rk   rl   rm   rn   roundpricer,   )r-   r.   r1   customerjobid_valdriverjobid_valcustomerjob_datar2   r3   r4   driverjob_objrw   rx   customerjob_objra   rg   rr   r5   r6   r6   r7   r"      s    

	
	
																				 
zDriverCustomerJobDetail.getN)r9   r:   r;   r"   r6   r6   r6   r7   rZ      s   rZ   c               @   s   e  Z d  Z d d   Z d S)DriverPickupVerifyParcelc       	   '   O   s  t  d  t  d  t  d | j  | j j d  } | sR t d d d d i  S| j j d	  } | s t d d d d
 i  Sy?| j j d  } | s t d d d d i  St j j d | d |  j   } | rd | _ | j	   y  t
 | j j d d d d  Wn/ t k
 r<} z t  |  WYd  d  } ~ Xn Xy# t
 | j j j d d d d  Wn/ t k
 r} z t  |  WYd  d  } ~ Xn Xt d d d d i  St d d d d i  SWn; t k
 r} z t d d d d i  SWYd  d  } ~ Xn Xd  S)Nz

z&DriverPickupVerifyParcel API - in postzdata is  : r   r   i  r   zUser not logged in.r[   zcustomerjobid is requiredr\   zdriverjobid is requiredr   customerjob_idTr   Zstatuschanger@   z&You have picked up parcel successfullycustomerz%Your parcel is picked up successfullyr   r   zNot a valid requesti  zInternal Server Error)r    r!   r"   r   ry   r#   r$   r%   rz   r*   r   r   rC   r,   customerjobr   )	r-   r.   r/   r0   r1   r   r   r   r5   r6   r6   r7   r8     s:    

!	
 #zDriverPickupVerifyParcel.postN)r9   r:   r;   r8   r6   r6   r6   r7   r     s   r   c               @   s"   e  Z d  Z d Z d d   Z d S)DriverRegisterzEThis API sends the OTP on customer mobile at the time of registrationc          !   O   s  yt  d  t  d | j  | j j d  } | j j d  } | j j d  } | j j d  } | j j d  } | j j d  }	 | s t d	 d
 d d i  S| s t d	 d
 d d i  S| s t d	 d
 d d i  S| s t d	 d
 d d i  S| st d	 d
 d d i  S|	 s1t d	 d
 d d i  St j j d |  j   }
 |
 r%y t j j d |
 d d  } | rt d	 d d d i  St j j d |
 d d  } | rt d	 d d d i  St d	 d d d i  SWqt	 k
 r!} z% t  |  t d	 d d d i  SWYd  d  } ~ XqXnet j j
 d | d | d |	  }
 d j d d   t d   D  } d! | d" t |
 j  d# | } t t j  | } d$ | } y< t  |  t d% | d& t |  g d' d } t  |  Wn/ t	 k
 r} z t  |  WYd  d  } ~ Xn X| d( k rtt j j d |
 d | d | d | d | d) |  } | rt d	 d d d i  Sn t d	 d
 d d* i  SWnE t	 k
 r} z% t  |  t d	 d+ d d, i  SWYd  d  } ~ Xn Xd  S)-NzDriverRegister API - in postzdata is  : userroler   emailcountrycodephonerB   r   i  r   zUser Role is requiredzName is requiredzEmail Address is requiredzCountrycode is requiredzPhone number is requiredzPassword is requiredusernamer   emailverifiedTi  zUser already existsFr   z8A verification link has been sent to your email address.z2A customer with this email address already exists.zUser already exists.r_   c             S   s)   g  |  ] } t  j t j t j   q Sr6   )randomchoicestringascii_lettersdigits).0nr6   r6   r7   
<listcomp>  s   	 z'DriverRegister.post.<locals>.<listcomp>   z/user/z/verify//z-
Verify your account through following link:
zEmail verification:ztmpython4esf@gmail.comfail_silentlyr   emailverificationlinkzUser Role is not definedi  zInternal Server Error)r    r!   r"   r   r'   r#   r$   r%   r(   r,   create_userjoinranger}   r   r   WEB_BASE_URLr   r+   )r-   r.   r/   r0   userrole_valname_val	email_valcountrycode_val	phone_valpassword_valr3   Zdriver_emailverified_objZdriver_emailnotverified_objr5   stbaselinkcompletelinkmessageresr4   r6   r6   r7   r8   ]  sj    

,!"#

$3
zDriverRegister.postN)r9   r:   r;   __doc__r8   r6   r6   r6   r7   r   [  s   r   c               @   s"   e  Z d  Z d Z d d   Z d S)DriverLoginz5This class is used for login process for driver usersc             O   s  ypt  d  | j j d  } | j j d  } | j j d  } | j j d  } | sq t d d d d	 i  S| s t d d d d
 i  S| s t d d d d i  S| s t d d d d i  St d | d |  } | d  k	 rOt  d  t j j d |  \ }	 }
 | d k r9t  d  t j j	 d |  j
   } | r9t  d  | j d k rqt d d d d i  S| j rt d d d d i  S| | _ | j   t | j  \ } } | d k rt  |  n | d k rt  |  t d d d d d | j d | j d | j d | j j d |	 j d  | d d! i	  St d d" d d# i  St  d$  t d d" d d# i  SWnR t k
 r} z2 t  d% |  t d d& d d' t |  i  SWYd  d  } ~ Xn Xd  S)(NzDriverLogin API - in postr   r   rB   fcmr   i  r   zUser Role is requiredzFcm token is requiredzEmail address is requiredzPassword is requiredr   0r   r   12Fo   zPlease verify your email first.d   zUser is disabled by Admin.r   rG   r   r   r   r   imagetokenrH   zdriver login successfulli  zInvalid Credentials.3zerror isi  zException occurred : )r    r!   r"   r   r   r   r#   get_or_creater(   r$   r%   r   
isdisabledrC   r*   r   r   r   r   r   r   r   r,   r}   )r-   r.   r/   r0   r   r   r   fcmtoken_valr   r   rQ   r4   rJ   rH   rG   r6   r6   r7   r8     sR    



		

R
zDriverLogin.postN)r9   r:   r;   r   r8   r6   r6   r6   r7   r     s   r   c               @   s   e  Z d  Z d d   Z d S)
GetProfilec             C   s  t  d | j  y| j j d  } | sA t d d d d i  St j j d |  j   } | rt j j d | j	  j   } | rt
 j j d	 |  j   } | rl| j j s d
 } n | j j } | j d d
  } | j s d
 } n	 | j } | j sd
 } n	 | j } i  }	 |	 j d | j d | j d | d | j d | d | i  t d d d |	 d d i  St d d d i  d d
 i  Sqt d d d i  d d
 i  Sn t d d d i  d d
 i  SWnE t k
 r}
 z% t  |
  t d d d d i  SWYd d }
 ~
 Xn Xd S)z4 This API method is used to get profile data of userzdata is  : r   r   i  r   zUser not logged inr   r   r   r_   z:9999r   r   r   r   addressr   r   rS   r   i  zInternal Server ErrorN)r    rI   r"   r   r   r#   r$   r%   r'   r&   r(   r   r   replacer   r   r   r   r   r,   )r-   r.   r1   r2   r3   r4   r   r   r   profile_datar5   r6   r6   r7   r"     sH    										 
zGetProfile.getN)r9   r:   r;   r"   r6   r6   r6   r7   r     s   r   c               @   s   e  Z d  Z d d   Z d S)UpdateProfilec             O   s  t  d  yid d d  } | j j d  } | j j d  } | j j d  } | j j d  } | j j d	  }	 | j j d
  }
 | j j d  } | s t d d d d i  S| s t d d d d i  S| s t d d d d i  S| s
t d d d d i  S|	 s&t d d d d i  S|
 sBt d d d d i  St j j d |  j   } | rrt j j d | j	  j   } | rrt
 j j d |  j   } | rr| | _ | | _ | | _ |
 | _ | j   | rd | } t  d  | | d | j t  d  y t | j d d d  d!  Wn/ t k
 r[} z t  |  WYd  d  } ~ Xn Xt d d" d d# i  SWnE t k
 r} z% t  |  t d d$ d d% i  SWYd  d  } ~ Xn Xd  S)&NzUpdateProfile - in postzc:\c                s  t  |  t  d  t  d  |  j d  } t  d  | d } t  d  | j d  } t  d  t  |  t | d	  } t  d
  | d	 } t  d  t j |  } t  d  t |  } t  d  d d l m }	 d d  l  d d  l	  d d  l
  t  d  |	 j |  }
 t  d  t j j d |  } d j   f d d   t d  D  } t j j   } t t j  d t | j  d t | j j     j j    r   f d d    j    D } x+ | D] }  j |  qWn  j    x | D] } |	 j |  }
 |
 j t | j  t | j   g |	 j!  } |
 j"   d t | j  d t | j   d | d |  } qW|	 j |  }
 |
 j"   d | d |  t t j#  d t | j  d t | j j  d | d | } | | _$ | j"   d S)Nz

r   z;base64,r   r   r   r   r      4567)r   89r   r_   c                s)   g  |  ] }   j   j  j   q Sr6   )r   r   r   )r   r   )r   r   r6   r7   r   .  s   	 zAUpdateProfile.post.<locals>.getI420FromBase64.<locals>.<listcomp>   z/media/Users/Drivers/_c                s%   g  |  ] }  j  j   |   q Sr6   )pathr   )r   f)filepathosr6   r7   r   2  s   	 r	   -.z
/original-)%r    splitr}   base64	b64decoder   PILr   r   r   r   openr(   r#   r"   r   r   ThumbnailSizeallr   BASE_DIRr   r   r   r   existslistdirremovemkdir	thumbnailintrk   rj   	ANTIALIASr*   r   r   )codecid_val
image_pathbase64_dataextensext	extension	byte_data
image_datar   imgr4   r   thumbnailsize_objsfilesToRemover   objimfilenamer6   )r   r   r   r   r7   getI420FromBase64  sT    












$

+4%-ED	
z-UpdateProfile.post.<locals>.getI420FromBase64r   r   r   r   r   r   imagebase64rQ   i  r   zUser not logged inzName is requiredr   r   zCountrycode is requiredzPhone Number is requiredzEmail is requiredzAddress is requiredr   r   r   zdata:image/png;base64,zbefore function callr   zafter function callr   profiler@   z$Your profile is updated successfullyr   zprofile updated successfullyi  zInternal Server Error)r    r!   r"   r   r   r#   r$   r%   r'   r&   r(   r   r   r   r   r*   r   r   rC   r,   )r-   r.   r/   r0   r   r1   r   r   r   r   address_valimagebase64_valr2   r3   r4   r   r5   r6   r6   r7   r8     s\    
.				




zUpdateProfile.postN)r9   r:   r;   r8   r6   r6   r6   r7   r     s   r   c               @   s   e  Z d  Z d d   Z d S)ForgotPasswordc             O   s  y_| j  j d  } | j  j d  } | sC t d d d d i  S| s_ t d d d	 d
 i  St j j d |  } | rHt j j d |  j   } | r2d j d d   t	 d  D  } d | d t
 | j  d | }	 t
 t j  |	 }
 d |
 } |	 | _ | j   t d | d t
 |  g d d t d d d d i  St d d d	 d i  SWnK t k
 r} z+ t |  t d d d	 t
 |  i  SWYd  d  } ~ Xn Xd  S)Nr   r   r   r   r   zUser Role is requiredrQ   i  r   zEmail Address is requiredr   r_   c             S   s)   g  |  ] } t  j t j t j   q Sr6   )r   r   r   r   r   )r   r   r6   r6   r7   r     s   	 z'ForgotPassword.post.<locals>.<listcomp>r   z/user/z/forgot/r   z,
Forgot your Password click following link:
zForgot Password:ztestdemotest11@gmail.comr   Tr   zLink sent on email addresszEmail does not exist)r!   r"   r   r'   r#   r(   r$   r%   r   r   r}   r   r   r   forgot_password_linkr*   r   r,   r    )r-   r.   r/   r0   r   r   r3   r4   Zran_numr   r   r   r5   r6   r6   r7   r8   y  s.    "#
	
"
zForgotPassword.postN)r9   r:   r;   r8   r6   r6   r6   r7   r   w  s   r   c               @   s   e  Z d  Z d d   Z d S)DriverAllRequestsc             C   s  t  d | j  y'| j j d  } | sA t d d d d i  Sg  } t j j d |  j   } | rt j j d | j	  j   } | rt  d	  t
 j j d
 |  j   } | rt  d  t j j d d  j   } | r | j } n d } t j j d |  }	 |	 rt  d  t  t |	   x |	 D]| }
 | j d |
 j j d |
 j j d |
 j j d |
 j j d |
 j j d |
 j j d |
 j j d |
 j j d |
 j i	  q0Wt  |  t d d d | d | d d i  St d d d g  d d i  Sq6t d d d g  d d i  Sn t d d d g  d d i  SWnE t k
 r~} z% t  |  t d d  d d! i  SWYd" d" } ~ Xn Xd" S)#z4 This API method is used to get profile data of userzdata is  : r   r   i  r   zUser not logged inr   r   r   r   r   	isdeletedFr_   r   r   r`   rb   rc   rf   rg   rh   ri   r[   r\   r   rS   support_phoner   i  zUser not logged in.i  zInternal Server ErrorN)r    rI   r"   r   r   r#   r$   r%   r'   r&   r(   SupportDetailr   ry   lenrV   r   r`   rb   r   rf   rg   rh   r   r   r,   )r-   r.   r1   Zalldriverjobs_datar2   r3   r4   supportdetail_objr   r   jobr5   r6   r6   r7   r"     sR    



" 
zDriverAllRequests.getN)r9   r:   r;   r"   r6   r6   r6   r7   r     s   r   c               @   s   e  Z d  Z d d   Z d S)DriverOutstandingRequestsc             C   s  t  d | j  y9| j j d  } | sA t d d d d i  Sg  } t j j d |  j   } | r,t j j d | j	  j   } | rt  d	  t
 j j d
 |  j   } | rt  d  t j j d d  j   } | r | j } n d } t j j d | d d  }	 |	 rt  d  t  t |	   x |	 D] }
 | j d |
 j j d |
 j j d |
 j j d |
 j j d |
 j j d |
 j j d |
 j j d d d d d |
 j j d |
 j i  q6Wt  |  t d d d  | d! | d d" i  St d d d  g  d d" i  SqHt d d d  g  d d i  Sn t d d# d  g  d d$ i  SWnE t k
 r} z% t  |  t d d% d d& i  SWYd' d' } ~ Xn Xd' S)(z4 This API method is used to get profile data of userzdata is  : r   r   i  r   zUser not logged inr   r   r   r   r   r   Fr_   r   r{   r   r`   rb   rc   rf   rg   rh   ri   rQ   zWaiting For Pickup	awbnumberz
AWB-100001r[   r\   r   rS   r   r   i  zUser not logged in.i  zInternal Server ErrorN)r    rI   r"   r   r   r#   r$   r%   r'   r&   r(   r   r   ry   r   rV   r   r`   rb   r   rf   rg   rh   r   r   r,   )r-   r.   r1   Zoutstandingdriverjobs_datar2   r3   r4   r   r   r   r   r5   r6   r6   r7   r"     sV    



" 
zDriverOutstandingRequests.getN)r9   r:   r;   r"   r6   r6   r6   r7   r     s   r   c               @   s   e  Z d  Z d d   Z d S)DriverCompletedRequestsc             C   s  t  d | j  y9| j j d  } | sA t d d d d i  Sg  } t j j d |  j   } | r,t j j d | j	  j   } | rt  d	  t
 j j d
 |  j   } | rt  d  t j j d d  j   } | r | j } n d } t j j d | d d  }	 |	 rt  d  t  t |	   x |	 D] }
 | j d |
 j j d |
 j j d |
 j j d |
 j j d |
 j j d |
 j j d |
 j j d d d d d |
 j j d |
 j i  q6Wt  |  t d d  d! | d" | d d# i  St d d  d! g  d d# i  SqHt d d d! g  d d i  Sn t d d$ d! g  d d% i  SWnE t k
 r} z% t  |  t d d& d d' i  SWYd( d( } ~ Xn Xd( S))z4 This API method is used to get profile data of userzdata is  : r   r   i  r   zUser not logged inr   r   r   r   r   r   Fr_   r   r{   Tr   r`   rb   rc   rf   rg   rh   ri   rQ   Z	Deliveredr   z
AWB-100001r[   r\   r   rS   r   r   i  zUser not logged in.i  zInternal Server ErrorN)r    rI   r"   r   r   r#   r$   r%   r'   r&   r(   r   r   ry   r   rV   r   r`   rb   r   rf   rg   rh   r   r   r,   )r-   r.   r1   Zcompleteddriverjobs_datar2   r3   r4   r   r   r   r   r5   r6   r6   r7   r"     sV    



" 
zDriverCompletedRequests.getN)r9   r:   r;   r"   r6   r6   r6   r7   r     s   r   )4django.shortcutsr   rest_framework.viewsr   django.contrib.authr   rest_framework.authtoken.modelsr   django.httpr   r   r   Driver.modelsmathZAdminApp.modelsr   datetimepytzr   jsonr
   django.core.mailr   django.confr   django.views.generic.baser   r   r   ior   r   r   Customer.commonfunctionsr   r   django.contrib.auth.hashersr   r   r<   rF   rL   rZ   r   r   r   r   r   r   r   r   r   r6   r6   r6   r7   <module>   s@   

H,*&eIM24i78