
L^Q                @   sZ  d  d l  m Z d  d l m Z 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 d d	 l m Z m Z m Z d  d
 l m Z d  d l Td  d l m Z d  d l Td  d l Td  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% 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- m. Z. m/ Z/ d  d l0 m1 Z1 d  d l2 Z2 Gd d   d e  Z3 Gd d   d e  Z4 Gd d   d e  Z5 e e d d Gd d   d e   Z6 Gd  d!   d! e  Z7 Gd" d#   d# e  Z8 e e d d Gd$ d%   d% e   Z9 e e d d Gd& d'   d' e   Z: e e d d Gd( d)   d) e   Z; e e d d Gd* d+   d+ e   Z< Gd, d-   d- e  Z= e e d d Gd. d/   d/ e   Z> e e d d Gd0 d1   d1 e   Z? e e d d Gd2 d3   d3 e   Z@ e e d d Gd4 d5   d5 e   ZA e e d d Gd6 d7   d7 e   ZB e e d d Gd8 d9   d9 e   ZC e e d d Gd: d;   d; e   ZD Gd< d=   d= e  ZE Gd> d?   d? e  ZF Gd@ dA   dA e  ZG GdB dC   dC e  ZH GdD dE   dE e  ZI GdF dG   dG e  ZJ GdH dI   dI e  ZK GdJ dK   dK e  ZL e e d d GdL dM   dM e   ZM GdN dO   dO e  ZN GdP dQ   dQ e  ZO GdR dS   dS e  ZP GdT dU   dU e  ZQ d S)V    )render)TemplateViewView)HttpResponseJsonResponseHttpResponseRedirect)authenticate)User)Token)APIView   )checklogincustomerchecklogincompanycheckifcustomeralreadylogin)method_decorator)*)sendfcmnotification)assigndriverforparcel)redirect)reverseN)settings)	send_mail)	timedelta)getunreadnotificationcountgenerateparcelpdf)make_passwordc                   s(   e  Z d  Z d Z   f d d   Z   S)TestWebzcustomer_quickfareestimate.htmlc          
      s  t  t |   j |   } t d  d d l m  m  m  m   m	        f d d   } d d   } t
 j j d d  } x| D]} g  } | j r | j r | j r t d	  t t | j  d
 | j d | j d
 | j j  t j j d d d | j j  } t |  d k rPt d  t j j d | j j  j   }	 |	 r|	 j }
 t j j d |
  j d  } | rxV| D] } t j j d d d |  } | rx | D] } t j j d |  j   } | r;| | j | j | j | j  } t |  | j d | j d | j j d | i  qt d  qWqWn t d  x | D]} } t j j d |  j   } | r| | j | j | j | j  } | j d | j d | j j d | i  qat d  qaWt | d d d   d d } t |  t |  d k rd } xf| D]Q} | s)t | d  t j j d | d d d  } | r)d } xR | D]J } | j j  ru| j j  } t |  | |  \ } } | ru| | 7} quWd% \ } } | j  r| | j   \ } } d  } t! | j | d  } t |  d! | _" | j#   q)d  } t d" t | d   t! | j | d  } t |  d! | _" | j#   q)Wq t d#  q Wt d$  | S)&z<This function shows the content on customer dashboard screenzTestWeb - in get r   )radianscossinasinsqrtc       	         s   t  t |  | | | g  \ }  } } } t   |  | | | g  \ }  } } } | | } | |  }  | d  d  |    |   | d  d } d    |   } d } | | S)N   i  )mapfloat)	Zlat1Zlon1Zlat2Zlon2ZdlonZdlatacr)r    r   r   r   r!    I/home/development/Documents/Good_Delivery/GoodsDelivery/Customer/views.py	haversine$   s    ''

:z+TestWeb.get_context_data.<locals>.haversinec             S   sH   |  d k r d S|  d k r  d S|  d k r0 d S|  d k r@ d Sd Sd  S)NzLess than 5 kgT   z"More than 5 kg but less than 20 kg   z#More than 20 kg but less than 50 kg2   zMore than 50 kg3   Fr   )Tr+   )Tr,   )Tr-   )Tr.   )Fr   r(   )wtr(   r(   r)   getmaximumweightinbuffer.   s    z:TestWeb.get_context_data.<locals>.getmaximumweightinbufferstatus
z  --  ,vehicletype_idzin ifidZcarryinglimitinkg__gtecarryinglimitinkgvehicletypedriverdriveridZdrivervehicledistancezdriver coordinates do not existzin elsekeyc             S   s   |  d S)Nr:   r(   )ir(   r(   r)   <lambda>f   s    z*TestWeb.get_context_data.<locals>.<lambda>r   F	driver_idjobcompleted        Tr   z job assigned to driver with id: zdriver foundend)Fr@   )$superr   get_context_dataprintmathr   r   r   r    r!   CustomerJobobjectsfiltersenderlatitudesenderlongituder7   strr5   nameDriverModellenVehicleTypefirstr6   order_byDriverCoordinateslatitude	longitudeappendsorted	DriverJobcustomerjobweightr   r1   save)selfkwargscontextr*   r0   ZpendingcustomerjobsjobZnearestdrivers_data
driver_objZrequiredvehicletype_objZvehiclecarryinglimitZbiggervehicletype_objZbiggervehicler8   drivercoordinates_objr:   ZdriverassignedZnearestdriverdriverjob_objZdrivervehicletotalweight	driverjobr/   successrY   res)	__class__)r    r   r   r   r!   r)   rC      s    
(
	
7!
!	!
	
!	

	
	
	
zTestWeb.get_context_data)__name__
__module____qualname__template_namerC   r(   r(   )re   r)   r      s   r   c               @   s"   e  Z d  Z d Z d d   Z d S)PlaceOrderTestzQThis class is being used to save the customer job request details in the databasec       3   E   O   sa  t  d  t  d  t  d  t  | j  t  d  d d   } d d d  } | j j d  } | j j d	  } | j j d
  } t  d  t  t |   t j |  } t  d  d }	 t  d  |  j j j d  r|  j j d }
 t  |
  t	 j
 j d |
  j   } t  d  t j
 j d |  j   } t  d  | rt  d  xx| D]W} t  d  t  |  t  d  t  | d  t  | d  t  | d  t  | d  t  | d  t  | d  t  | d  t  | d  t  | d  t  | d  t  | d  t  | d  t  | d   t  | d!  | d } | d } | d } | d" } | d# } | d } | d } | d } | d } | d } | d } | d } | d } | d } | d  } | d! } | d$ } | d% } | d& }  | d' }! | d( }" t j
 j d) |   j   }# |# rYt  d*  t j
 j d | d | d | d | d | d
 | d+ | d | d | d  | d, | d- |	 d | d | d | d | d. | d& |# d' |!  }$ | r| |$ _ | |$ _ | |$ _ | |$ _ |$ j   yf t j
 j d/ |$ j d0 d1 d2 d3 d4 d5 d6 d7  t j
 j d | d/ |$ j d8 d1 d2 d3 d4 d9 d6 d7  Wn/ t k
 r}% z t  |%  WYd  d  }% ~% Xn Xy t | j d. d: d; d<  Wn/ t k
 r}% z t  |%  WYd  d  }% ~% Xn X|" rd= |" }& t  d>  | |& d? |$ j t  d@  y | d? |$ j  t  d@  Wn/ t k
 r`}% z t  |%  WYd  d  }% ~% Xn Xy t |$ j  }' t  |'  WqYt k
 r}% z t  |%  WYd  d  }% ~% XqYXqYWqt dA dB dC dD i  Sn t dA dB dC dD i  St j
 j   j }( t dA dE dC dF dG |( i  St dA dB dC dH i  St dA dE dC dI i  SydJ d   } d dK d  } | j j d  } | j j dL  }) | 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 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 j dM  }* | j j d$  } | j j d%  } | j j d&  }  | j j d'  }! | j j d(  }" | s<t dA dB dC dD i  S| sXt dA dB dC dN i  S| stt dA dB dC dO i  S| st dA dB dC dP i  S| st dA dB dC dQ i  S| st dA dB dC dR i  S| st dA dB dC dS i  S| s 	t dA dB dC dT i  S| s	t dA dB dC dU i  S| s8	t dA dB dC dV i  S| sT	t dA dB dC dW i  S| sp	t dA dB dC dX i  S|  s	t dA dB dC dY i  S|! s	t dA dB dC dZ i  S|) r;
yX t  |)  d[ t _ t j  j d\ t! t" |!  d]  d^ d_ d` da db |)  }+ t  |+  Wn2 t k
 r:
}% z t  dc |%  WYd  d  }% ~% Xn Xd }	 t  d  t# j
 j dd |  j   }, t  d  |, r1t  d  |, j$ }- t j
 j de |-  j   } t  d  | rGt  d  t j
 j d) |   j   }# |# rGt  d*  t j
 j d | d | d | d | d | d
 | d+ | d | d | d  | d, | d- |	 d | d | d | d | d. | d& |# d' |!  }$ | r| |$ _ | |$ _ | |$ _ | |$ _ |$ j   yi t j
 j d/ |$ j d0 d1 d2 d3 d4 d5 d6 d7  t j
 j d |, j% d/ |$ j d8 d1 d2 d3 d4 d9 d6 d7  Wn/ t k
 r8}% z t  |%  WYd  d  }% ~% Xn Xy t | j d. d: d; d<  Wn/ t k
 r}% z t  |%  WYd  d  }% ~% Xn X|" rd= |" }& t  d>  | |& d? |$ j t  d@  y | d? |$ j  t  d@  Wn/ t k
 r}% z t  |%  WYd  d  }% ~% Xn Xt dA dE dC dF dG |$ j i  Sn t dA dB dC dD i  St dA df dC dg i  St	 j
 j dh di  j   } | r~| st dA dB dC dD i  St# j
 j   }, t	 j
 j dh |
  j   } | rt j
 j d | dj d1  j   } | rt& j
 j dk dl dm t'  j   }. |. r|. j( }/ |. j) }0 t  |/  t  |0  t* t+ j,  }1 t- j- j. t/ j0 |1   }2 t  |2  |2 |/ k r|2 |0 k  rd1 |. _1 |. j   t dA dE dC dn i  St dA do dC dp i  Sqt dA do dC dq i  Sqt dA do dC dr i  Sn t dA ds dC dD i  SWnE t k
 r\}% z% t  |%  t dA df dC dg i  SWYd  d  }% ~% Xn Xd  S)tNz

zPlaceOrderTest Web - in postc       	      S   s  t  |   d d  l } d d  l } d d  l } t j j d |   } d j d d   t d  D  } t	 t
 j  d t	 | j  } | j j |  r n | j d  | j |  | j d d	 t	 |    } | j | d
 d d d t	 | j  d
 } | | _ | j   d S)Nr   r5    c             S   s)   g  |  ] } t  j t j t j   q Sr(   )randomchoicestringascii_lettersdigits).0nr(   r(   r)   
<listcomp>   s   	 z?PlaceOrderTest.post.<locals>.generateqrcode.<locals>.<listcomp>   z/media/CustomerJobs/contentzAWB-z/qrcode.pngscale   1)rD   pyqrcodepngosrF   rG   getjoinrangerK   r   BASE_DIRr5   pathexistsumaskmkdircreateqrcoderZ   )	id_valry   rz   r{   customerjob_objstfilepathurlfilenamer(   r(   r)   generateqrcode   s    
$" 	
z+PlaceOrderTest.post.<locals>.generateqrcodezc:\c                s  t  |  |  j d  } | d } | j d  } t | d  } | d } t j |  } t |  } d d l m }	 d d  l  d d  l	  d d  l
  |	 j |  }
 t j j d |  } d j   f d d	   t d
  D  } t j j   } t t j  d t | j     j j    rq   f d d	    j    D } x+ | D] }  j |  qWWn  j    |	 j |  }
 |
 j d d g |	 j  } |
 j   d d |  } d t | j  d d | } | | _ | j   d S)Nz;base64,r   /r   )Imager5   rk   c                s)   g  |  ] }   j   j  j   q Sr(   )rm   ro   rp   )rq   rr   )rl   rn   r(   r)   rs      s   	 zBPlaceOrderTest.post.<locals>.getI420FromBase64.<locals>.<listcomp>rt   z/media/CustomerJobs/c                s%   g  |  ] }  j  j   |   q Sr(   )r   r}   )rq   f)r   r{   r(   r)   rs      s   	 i  zparcelimage.rx   )rD   splitrK   base64	b64decodeBytesIOPILr   rn   rl   r{   openrF   rG   r|   r}   r~   ThumbnailSizeallr   r   r5   r   r   listdirremover   	thumbnail	ANTIALIASrZ   image)codecr   
image_pathbase64_dataextensext	extension	byte_data
image_datar   imgr   r   thumbnailsize_objsfilesToRemover   imr   r(   )r   r{   rl   rn   r)   getI420FromBase64   s6    


$+ %	
z.PlaceOrderTest.post.<locals>.getI420FromBase64session_tokenparcels_datanoofparcels0rx   r   email2user34r2   
sendernamesendercountrycodesenderphonepickupaddress
sendercitywidthheightrY   
parceltypespecialnoterecipientnamerecipientcountrycoderecipientphonedropaddressrI   rJ   recipientlatituderecipientlongituder7   priceimagebase64rL   5pickupspecialnotedropoffaddressdeliverydurationcustomercustomerjobidforcustomerTnotificationtypezParcel Job Creatednotificationtextz"You have created one parcel order.r1   unreadforadminz&Customer has created one parcel order.parcelKwickDeliveryz*Your parcel details are saved successfullyzdata:image/png;base64,zbefore function callr   zafter function callstatus_codei  status_messagezUser not logged in.   zSuccess.customerjob_idzHow are you?zsuccess.c       	      S   s  t  |   d d  l } d d  l } d d  l } t j j d |   } d j d d   t d  D  } t	 t
 j  d t	 | j  } | j j |  r n | j |  | j d d	 t	 |    } | j | d
 d d d t	 | j  d
 } | | _ | j   d S)Nr   r5   rk   c             S   s)   g  |  ] } t  j t j t j   q Sr(   )rl   rm   rn   ro   rp   )rq   rr   r(   r(   r)   rs   V  s   	 z?PlaceOrderTest.post.<locals>.generateqrcode.<locals>.<listcomp>rt   z/media/CustomerJobs/ru   zAWB-z/qrcode.pngrv   rw   rx   )rD   ry   rz   r{   rF   rG   r|   r}   r~   rK   r   r   r5   r   r   r   r   r   rZ   )	r   ry   rz   r{   r   r   r   r   r   r(   r(   r)   r   Q  s    
$" 	
c                s  t  |  |  j d  } | d } | j d  } t | d  } | d } t j |  } t |  } d d l m }	 d d  l  d d  l	  d d  l
  |	 j |  }
 t j j d |  } d j   f d d	   t d
  D  } t j j   } t t j  d t | j     j j    rq   f d d	    j    D } x+ | D] }  j |  qWWn  j    |	 j |  }
 |
 j d d g |	 j  } |
 j   d d |  } d t | j  d d | } | | _ | j   d S)Nz;base64,r   r   r   )r   r5   rk   c                s)   g  |  ] }   j   j  j   q Sr(   )rm   ro   rp   )rq   rr   )rl   rn   r(   r)   rs   s  s   	 zBPlaceOrderTest.post.<locals>.getI420FromBase64.<locals>.<listcomp>rt   z/media/CustomerJobs/c                s%   g  |  ] }  j  j   |   q Sr(   )r   r}   )rq   r   )r   r{   r(   r)   rs   w  s   	 i  zparcelimage.rx   )rD   r   rK   r   r   r   r   r   rn   rl   r{   r   rF   rG   r|   r}   r~   r   r   r   r   r5   r   r   r   r   r   r   r   rZ   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r(   )r   r{   rl   rn   r)   r   f  s6    


$+ %	
payment_tokenrecipientspecialnotezsendername_val is requiredzSender countrycode is requiredz"Sender senderphone_val is requiredzpickupaddress_val is requiredzsendercity_val is requiredznoofparcels_val is requiredzparceltype_val is requiredzrecipientname_val is requiredz!recipient countrycode is requiredzrecipientphone_val is requiredzdropaddress_val is requiredzvehicletype_val is requiredzprice_val is required*sk_test_w82uzdTc8eWEVizgPOI0WRnj00n43jBnY5amountd   currencyeurdescriptionzParcel PaymentsourcezException in creating charge = r;   user__idi  zInternal Server Errorusernamezraheja@yopmail.comaccountapprovedcasesignupotpzUser registered successfully.r   zOTP has expired 1zInvalid OTPzCustomer exists.i  )2rD   POSTr|   typejsonloadsrequestsessionhas_keyr	   rG   rH   rP   CustomerrO   rF   r   rI   rJ   r   r   rZ   Notificationsr5   	Exceptionr   fcmtokenr   r   laststripeapi_keyChargeintr$   r
   user_idr   OTPotp_valstartdatetimeexpiredatetimerK   r   	TIME_ZONEdatetimenowpytztimezoneverified)3r[   r   argsr\   r   r   session_token_valr   noofparcels_valdeliveryduration_val	email_valuser_objcustomer_objr   sendername_valsendercountrycode_valsenderphone_valsenderlatitude_valsenderlongitude_valpickupaddress_valsendercity_val	width_val
height_val
weight_valparceltype_valspecialnote_valrecipientname_valrecipientcountrycode_valrecipientphone_valdropaddress_valrecipientlatitude_valrecipientlongitude_valvehicletype_val	price_valimagebase64_valvehicletype_objr   er   rd   lastcustomerjobidr   recipientspecialnote_valcharge	token_objr   otp_objst_timeex_timer   timer(   r(   r)   post   s   



!































				
.8


$!
		 


	


				
.;


"!!		


	

zPlaceOrderTest.postN)rf   rg   rh   __doc__r%  r(   r(   r(   r)   rj      s   rj   c                   s4   e  Z d  Z d Z   f d d   Z d d   Z   S)QuickFareEstimatezcustomer_quickfareestimate.htmlc                s   t  t |   j |   } t d  g  } t j j d d  } | rs x- | D]% } | j d | j d | j	 i  qJ W| | d <| S)z<This function shows the content on customer dashboard screenzQuickFareEstimate - in get 	isdeletedFvehicletypeidr7   allvehicletypes)
rB   r'  rC   rD   rO   rG   rH   rU   r5   rL   )r[   r\   r]   datar*  r7   )re   r(   r)   rC   ?  s    
	
z"QuickFareEstimate.get_context_datac             O   s*  y t  d  d d   } | j j d  } | j j d  } | j j d  } | sk t d d d	 d
 i  S| s t d d d	 d i  S| s t d d d	 d i  S| | | |  \ } }	 }
 t d | d	 |	 d |
 i  SWnH t k
 r%} z( t  d |  t d d d	 d i  SWYd  d  } ~ Xn Xd  S)NzQuickFareEstimate API - in postc             S   s  g  } yt  t j  } |  j d d  }  |  j d d  }  | j d d  } | j d d  } |  } | } d } t | d | d | d |  t j | d | d | d |  } | j   }	 t |	  t d  |	 d	 d
 k rd }
 t |	 d d d d d d  |
 } t	 j
 j d d d |  j   } | r| } | | j k ra| j } nR | j } | | j } | t |  k rt |  d } n | } | | | j } | j d k rt  t j  d } n | j d k rt  t j  d } nl | j d k r"t  t j  d } nG | j d k rGt  t j  d } n" | j d k rit  t j  d } | j d | j d t  t t |  d    d! | i  d" d# | f Sd$ d% | f SWn< t k
 r} z t |  d$ d% | f SWYd  d  } ~ Xn Xd  S)&N rk   #z9https://maps.googleapis.com/maps/api/distancematrix/json?zorigins=z&destinations=z&key=r2   r1   OKgobyp\D?rowsr   elementsr:   valuedistanceunitmilerL   r   bikez/static/images/bike.pngcarz/static/images/car.jpgsmallvanz/static/images/smallvan.png	mediumvanlargevanz/static/images/largevan.jpgr7   r   r"   r   r   rc   i  zEnter valid address)rK   r   GOOGLE_API_KEYreplacerD   requestsr|   r   r$   rO   rG   rH   rP   fixeddistancebaserater   addittionalrateperunitrL   WEB_BASE_URLrU   roundr   )r  r  r  r+  r   r   destr   r'   xmultiplicationfactordistanceinmilesr  r:   rater   r  r(   r(   r)   getquickfareforvehicletypeR  sZ    "'

(!	7
z:QuickFareEstimate.post.<locals>.getquickfareforvehicletyper   r   r7   r   i  r   zpickupaddress is requiredzdropaddress is requiredzvehicletype is requiredr+  zerror isi  zInternal Server Error)rD   r   r|   r   r   )r[   r   r   r\   rF  r  r  r  r   r   r+  errorr(   r(   r)   r%  N  s"    
= zQuickFareEstimate.post)rf   rg   rh   ri   rC   r%  r(   r(   )re   r)   r'  <  s   r'  rL   dispatchc                   s(   e  Z d  Z d Z   f d d   Z   S)CustomerNotificationszcustomer_notifications.htmlc                s  t  t |   j |   } t d  |  j j j d  r|  j j d } t j j	 d |  j
   } | rg  } t j j	 d |  j d  } | rxZ | D]R } | j d | j d | j d | j d | j d	 | j d
 | j d | j i  q W| | d <d | d <| S)z<This function shows the content on customer dashboard screenzCustomerNotifications - in get r   r   z-idr5   r   r   r   r1   datedeletedall_notificationsr   userrole)rB   rI  rC   rD   r   r   r   r	   rG   rH   rP   r   rQ   rU   r5   r   r   r   r1   rJ  rK  )r[   r\   r]   r  r  notifications_datarL  notification)re   r(   r)   rC     s*    
						

z&CustomerNotifications.get_context_data)rf   rg   rh   ri   rC   r(   r(   )re   r)   rI    s   rI  c                   s4   e  Z d  Z d Z d d   Z   f d d   Z   S)CustomerJobRaiseTicketzcustomerjobraiseticket.htmlc             O   sN  t  d  t  d  t  | j  y | j j d  } | j j d  } t j j d |  j   } | r t j j d | d | j	 d | d	 d
  nW t  d  t j j d |  } | r t  d  t j j d | d | j	 d | d	 d
  t
 d d d d i  SWnE t k
 rI} z% t  |  t
 d d d d i  SWYd  d  } ~ Xn Xd  S)Nz!CustomerJobRaiseTicket - in post z

r   complaintmessager   disputemessagethreadrX   messagefromuserTzin elseifr   r   r   rc   i  zInternal server error.)rD   r   r|   DisputeMessageThreadModelrG   rH   rP   DisputeMessageModelr   rX   r   r   )r[   r   r   r\   r   rQ  disputemessagethreadmodel_objr  r(   r(   r)   r%    s$    

+

(
zCustomerJobRaiseTicket.postc       
         s   t  t |   j |   } |  j j j d  r |  j j d } i  } t j j d |  j	   } | r t
 j j d |  j	   } | r | d } t |  t j j d |  j	   } | r t j j d |  }	 |	 r |	 | d <t | d  | | d <| S)Nr   r   r   r   rR  Zdisputemessage)rB   rP  rC   r   r   r   r	   rG   rH   rP   r   rD   rV  rW  )
r[   r\   r]   emailidr+  r  r  r   rX  Zdisputemessagemodel_obj)re   r(   r)   rC     s$    



z'CustomerJobRaiseTicket.get_context_data)rf   rg   rh   ri   r%  rC   r(   r(   )re   r)   rP    s   rP  c                   s4   e  Z d  Z d Z d d   Z   f d d   Z   S)CustomerJobDetailzcustomerjobdetail.htmlc             O   s   d  S)Nr(   )r[   r   r   r\   r(   r(   r)   r%    s    zCustomerJobDetail.postc          -      s  t  t |   j |   } |  j j j d  r|  j j d } i  } t j j d |  j	   } | rt
 j j d |  j	   } | r| d } t |  t j j d | d |  j	   } | r| j s d }	 n	 | j }	 | j s d }
 n	 | j }
 | j sd } n t t j  | j j } | j s@t t j  d } n t t j  | j j } d } i  } t j j d	 |  j	   } | r| j d
 | j j d | j j d | j j d | j j d | j i  d } | j d | j d | j d | j j j d | j d | j  d | j! d | j" d | j# d | j$ d | j% d | j& d | j' d | j d | j( j d | j) d | d d d  | d | j d! d" t d# | j  d$ | d% | i  | | d	 <t | d	  | S)&Nr   r   r   r5   r   rk   z/static/images/camera.pngFrX   
drivernamedrivercountrycodedriverphoner9   driverjobidTr   senderemailr   r   senderpickupaddressr   r   recipientdropoffaddressrY   r   r   r   r7   r   parcelimageparcelpdf_linkr   	awbnumberzAWB-i'  driverexistdriverdetails)*rB   rZ  rC   r   r   r   r	   rG   rH   rP   r   rD   rF   r   r   r   rK   r   MEDIA_BASE_URLrL   r   rW   updater8   countrycodephoner5   r   r   r   r   r   r   r   r   r   r   rY   r   r   r7   r   )r[   r\   r]   rY  r+  r  r  r   r   r   r   r   rb  re  driverjob_datara   )re   r(   r)   rC     sz    

!																							
z"CustomerJobDetail.get_context_data)rf   rg   rh   ri   r%  rC   r(   r(   )re   r)   rZ    s   rZ  c               @   s   e  Z d  Z d d   Z d S)CustomerProfileUpdatec       
      C   s  t  d  yi  } |  j j j d  r8 |  j j d } |  j j j d  r] |  j j d } |  j j j d  } |  j j j d  } |  j j j d  } |  j 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  St j j	 d |  j
   } | r}| | _ | | _ | | _ | j   t 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)z1This function shows the content on profile screenzCustomerProfileUpdate - in get r   rM  
customeridrL   rj  r   i  r   zCustomer Id is requiredzName is requiredzEmail Address is requiredzPhone is requiredr5   r   zProfile updated successfullyz%You are not allowed to change detailsi  zInternal server error.N)rD   r   r   r   r   r|   r   r   rG   rH   rP   rL   r   rj  rZ   r   )
r[   r   r]   r  userrole_valcustomerid_valname_val	phone_valr  r  r(   r(   r)   r%  B  s<    
			

zCustomerProfileUpdate.postN)rf   rg   rh   r%  r(   r(   r(   r)   rl  @  s   rl  c               @   s   e  Z d  Z d d   Z d S)CompanyProfileUpdatec       
      C   s  t  d  yi  } |  j j j d  r8 |  j j d } |  j j j d  r] |  j j d } |  j j j d  } |  j j j d  } |  j j j d  } |  j 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  St j j	 d |  j
   } | r}| | _ | | _ | | _ | j   t 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)z1This function shows the content on profile screenzCustomerProfileUpdate - in get r   rM  rm  rL   rj  r   i  r   zCustomer Id is requiredzName is requiredzEmail Address is requiredzPhone is requiredr5   r   zProfile updated successfullyz%You are not allowed to change detailsi  zInternal server error.N)rD   r   r   r   r   r|   r   r   rG   rH   rP   rL   r   rj  rZ   r   )
r[   r   r]   r  rn  ro  rp  rq  r  r  r(   r(   r)   r%  j  s<    
			

zCompanyProfileUpdate.postN)rf   rg   rh   r%  r(   r(   r(   r)   rr  h  s   rr  c                   s(   e  Z d  Z d Z   f d d   Z   S)CustomerProfilezcustomer_profile.htmlc          	      s   t  t |   j |   } t d  |  j j j d  rG |  j j d } t j j	 d |  j
   } t d  | r t d  t j j	 d |  j d  j
   } | r t d  g  } | j d | j d | j d | j d	 | j i  | | d <d
 | d <| S)z1This function shows the content on profile screenzCustomerProfile - in get r   r   rx   r   r   rL   rj  r5   yesprofile_section)rB   rs  rC   rD   r   r   r   r	   rG   rH   rP   r   prefetch_relatedrU   rL   r   rj  r5   )r[   r\   r]   r  r  r  customer_data)re   r(   r)   rC     s(    


$
			

z CustomerProfile.get_context_data)rf   rg   rh   ri   rC   r(   r(   )re   r)   rs    s   rs  c                   s(   e  Z d  Z d Z   f d d   Z   S)CompanyProfilezcompany_profile.htmlc                s   t  t |   j |   } t d  |  j j j d  rG |  j j d } t j j	 d |  j
   } | r t j j	 d |  j d  j
   } | r | | d <d | d <d | d <| S)z;This function shows the content on company dashboard screenzCompanyProfile - in get r   r   companyrM  rt  ru  )rB   rx  rC   rD   r   r   r   r	   rG   rH   rP   Companyrv  )r[   r\   r]   r  r  company_obj)re   r(   r)   rC     s    
$


zCompanyProfile.get_context_data)rf   rg   rh   ri   rC   r(   r(   )re   r)   rx    s   rx  c               @   s   e  Z d  Z d d   Z d S)	ResendOTPc             O   s	  t  d  y| j j d  } | s; t d d d d i  S| j j d  } | si t d d d d i  Sd	 | k r d	 | } | j j d
  } | s t d d d d i  Sd } d } x5 t d  D]' }	 | | t j t j   d  7} q Wt j j	   }
 t j j	   t
 d d  } d } t j j d | | d |  j   } | ru|
 | _ | | _ | | _ | j   n1 t j j d | | d | d | d |
 d |  } 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 is used to resend OTP to the userzWeb - in resend_otp functionr   r   r   r   zEmail Address is requiredri  zCountrycode is required+rj  zPhone number is required
0123456789rk   r+   
   minutes   r   mobiler   r   r   r   r   zOTP sent on phone.zInternal Server ErrorN)rD   r   r|   r   r~   rE   floorrl   r   r   r   r   rG   rH   rP   r   r   r   rZ   r   r   )r[   r   r   r\   r  countrycode_valrq  rp   r   r<   
start_timeexpire_timer   r!  r  r(   r(   r)   r%    s>    

%%			1
zResendOTP.postN)rf   rg   rh   r%  r(   r(   r(   r)   r|    s   r|  c               @   s   e  Z d  Z d d   Z d S)GetFaresc       #      O   s  yt  d  t  d  t  | j  t  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 j d  } | j j d  } | j j d  } | j j d  } | j j d  } | j j d  } | j j d  } | j j d  } | sj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|
 st d d d d i  S| st d d d d i  S| s.t d d d d i  S| sJt d d d d i  S| sft d d d d i  S| st d d d d  i  Sg  } yd! } | j d" d#  } | j d$ d#  } | j d" d#  } | j d$ d#  } | } | } d% } t  |  t  | d& | d' | d( |  t j | d& | d' | d( |  } | j   } t  |  t  d)  | d* d+ k r@d, } t | d- d. d/ d. d0 d1  | } t  |  t j	 j
 d2 d3  } | rVx| D]q} | } | | j k r| j }  n | j }  t  d)  t  | j  t  |   | | j } t  |  | t |  k rUt |  d4 } n | } t  |  t  | j  |  | | j }  t  |   | j d5 k rd6 }! n] | j d7 k rd8 }! nE | j d9 k rd: }! n- | j d; k rd: }! n | j d< k rd= }! | j d> | j d? t t t |   d@   dA |! i  qWn t d d d dB i  SWnE t k
 r}" z% t  |"  t d d d dB i  SWYdC dC }" ~" Xn Xt d dD d dE dF | i  SWnE t k
 r}" z% t  |"  t d dG d dH i  SWYdC dC }" ~" Xn XdC S)IzPThis function is being used to return fares according to different vehicle typeszGetFares Web- in post z

r   r   r   r   r   r   r   r   r   rY   r   r   r   r   r   r   r   i  r   zsendername_val is requiredzSender countrycode is requiredzSender phone number is requiredzpickupaddress_val is requiredzsendercity_val is requiredznoofparcels_val is requiredzparceltype_val is requiredzrecipientname_val is requiredz!recipient countrycode is requiredzrecipientphone_val is requiredzdropaddress_val is required'AIzaSyCZt3wR3ItaSSmIhWnRy4hy6FnqmEM81oYr,  rk   r-  z9https://maps.googleapis.com/maps/api/distancematrix/json?zorigins=z&destinations=z&key=r2   r1   r.  gobyp\D?r/  r   r0  r:   r1  r2  r3  r   r4  z*http://13.126.26.12/static/images/bike.pngr5  z)http://13.126.26.12/static/images/car.jpgr6  z.http://13.126.26.12/static/images/smallvan.pngr7  r8  z.http://13.126.26.12/static/images/largevan.jpgr7   r   r"   r   zEnter valid addressNr   zSuccess.r+  i  zInternal Server Error)rD   r   r|   r   r:  r;  r   r$   rO   rG   rH   r<  r=  rL   r   r>  rU   rK   r@  r   )#r[   r   r   r\   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r+  r   r   rA  r   r'   rB  rC  rD  r  vehicler:   rE  r   r  r(   r(   r)   r%    s    



"'

(
	




				>
) 
zGetFares.postN)rf   rg   rh   r%  r(   r(   r(   r)   r    s   r  c                   s4   e  Z d  Z d Z   f d d   Z d d   Z   S)
PlaceOrderzplaceorder.htmlc                s0   t  t |   j |   } t d  d | d <| S)z4This function passes arguments to place order page. zPlaceOrder - in get rt  Zplaceorder_section)rB   r  rC   rD   )r[   r\   r]   )re   r(   r)   rC   {  s    

zPlaceOrder.get_context_datac       )   -   O   s  t  d  yt  | j  d d   } d d 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 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 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| s3t d d d  d% i  S| sOt d d d  d& i  S| sk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| st d d d  d, i  Sd d- l } t  d.  t t |  d/  } t t j	  | _
 | j j d0 | d1 d2 d3 d4 d5 |  } t  |  | j } | j } | j j } t  d6  | d7 d8 d9 } t  |  | d: k rd; } n | d< k rd= } | d7 d8 d> }  t  d? |  d?  d@ }! t  dA  |  j j j dB  rw|  j j dB }" t  |"  t j j dB |"  j   }# |# rt j j dC |#  j   }$ t  dD  |$ rt  dE  t j j dF |  j   }% |% rt  dG  t j j d | d	 | d
 |	 d |
 d | d | dH | d | d | d | dI | dJ |! d | d | d | d | dK |$ d |% d |  }& yf t j j dL |& j dM dN dO dP dQ dR d dS  t j j dC |# dL |& j dT dN dO dP dQ dU d dS  Wn/ t k
 r}' z t  |'  WYd- d- }' ~' Xn X| rdV | }( t  dW  | |( dX |& j t  dY  y | dX |& j  t  dY  Wn/ t k
 rT}' z t  |'  WYd- d- }' ~' Xn Xt d dZ d  d[ d\ |& j i  Sn t 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)`zTThis function is being used to save the customer job request details in the databasezPlaceOrder Web - in postc       	      S   s  t  |   d d  l } d d  l } d d  l } t j j d |   } d j d d   t d  D  } t	 t
 j  d t	 | j  } | j j |  r n | j |  | j d d	 t	 |    } | j | d
 d d d t	 | j  d
 } | | _ | j   d S)Nr   r5   rk   c             S   s)   g  |  ] } t  j t j t j   q Sr(   )rl   rm   rn   ro   rp   )rq   rr   r(   r(   r)   rs     s   	 z;PlaceOrder.post.<locals>.generateqrcode.<locals>.<listcomp>rt   z/media/CustomerJobs/ru   zAWB-z/qrcode.pngrv   rw   rx   )rD   ry   rz   r{   rF   rG   r|   r}   r~   rK   r   r   r5   r   r   r   r   r   rZ   )	r   ry   rz   r{   r   r   r   r   r   r(   r(   r)   r     s    
$" 	
z'PlaceOrder.post.<locals>.generateqrcodezc:\c                s  t  |  |  j d  } | d } | j d  } t | d  } | d } t j |  } t |  } d d l m }	 d d  l  d d  l	  d d  l
  |	 j |  }
 t j j d |  } d j   f d d	   t d
  D  } t j j   } t t j  d t | j     j j    rq   f d d	    j    D } x+ | D] }  j |  qWWn  j    |	 j |  }
 |
 j d d g |	 j  } |
 j   d d |  } d t | j  d d | } | | _ | j   d S)Nz;base64,r   r   r   )r   r5   rk   c                s)   g  |  ] }   j   j  j   q Sr(   )rm   ro   rp   )rq   rr   )rl   rn   r(   r)   rs     s   	 z>PlaceOrder.post.<locals>.getI420FromBase64.<locals>.<listcomp>rt   z/media/CustomerJobs/c                s%   g  |  ] }  j  j   |   q Sr(   )r   r}   )rq   r   )r   r{   r(   r)   rs     s   	 i  zparcelimage.rx   )rD   r   rK   r   r   r   r   r   rn   rl   r{   r   rF   rG   r|   r}   r~   r   r   r   r   r5   r   r   r   r   r   r   r   rZ   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r(   )r   r{   rl   rn   r)   r     s6    


$+ %	
z*PlaceOrder.post.<locals>.getI420FromBase64r   r   r   r   r   r   r   r   r   rY   r   r   r   r   r   r   r7   r   r   r1   r   rS  zpayment_token Emptyr   i  r   zsendername_val is requiredz"Sender senderphone_val is requiredzpickupaddress_val is requiredzsendercity_val is requiredznoofparcels_val is requiredzparceltype_val is requiredzrecipientname_val is requiredz!recipient countrycode is requiredzrecipientphone_val is requiredzdropaddress_val is requiredzvehicletype_val is requiredzprice_val is requiredNr   r   r   r   r   r   zParcel Paymentr   rx   Zpayment_method_detailscardZfundingZcreditzCredit CardZdebitz
Debit CardZlast4z



r   r   r   r   r   r   rL   r   r   r   r   r   r   r   Tr   zParcel Job Createdr   z"You have created one parcel order.r   r   z&Customer has created one parcel order.zdata:image/png;base64,zbefore function callr   zafter function callr   zSuccess.r   zUser not logged in.i  zInternal Server Error)rD   r   r|   r   r   r   r$   rK   r   STRIPE_KEY_TESTr   r   r   r5   receipt_urlZrefundsr   r   r   r   r	   rG   rH   rP   r   rO   rF   r   r   ))r[   r   r   r\   r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   Zpaymentamount_valr  Z
payment_idr  refunds_urlpayment_methodZlastfourdigitsr  r  r  r  r  r   r  r   r(   r(   r)   r%    s    
"
	
		

	




.8


"
zPlaceOrder.post)rf   rg   rh   ri   rC   r%  r(   r(   )re   r)   r  w  s   r  c                   s(   e  Z d  Z d Z   f d d   Z   S)MyJobszmyjobs.htmlc                s   t  t |   j |   } t d  t d  |  j j j d  r |  j j d } t |  t j j	 d |  j
   } | r t j j	 d |  j d  } | r | | d <t |  t d  d | d <| S)	z<This function shows the content on all customer jobs by userzMyJobs - in get z


r   r   z-idall_customerjobsrt  myjobs_section)rB   r  rC   rD   r   r   r   r   rG   rH   rP   rF   rQ   )r[   r\   r]   r  r  r   )re   r(   r)   rC   O  s    






zMyJobs.get_context_data)rf   rg   rh   ri   rC   r(   r(   )re   r)   r  K  s   r  c                   s(   e  Z d  Z d Z   f d d   Z   S)MyJobsOngoingzmyjobs.htmlc                sG  t  t |   j |   } t d  t d  g  } |  j j j d  r/|  j j d } t |  t j j	 d |  j
   } | r/t j j	 d |  j d  } | r/x | D]~ } | j d | j d | j d | j d | j j j d	 | j d
 | j d | j d | j d | j i	  | | d <d | d <q Wt d  d | d <| S)z<This function shows the content on all customer jobs by userzMyJobsOngoing - in get z


r   r   z-idr5   r   r_  r   r`  r   ra  r   r  zOngoing Jobs	page_namert  r  )rB   r  rC   rD   r   r   r   r   rG   rH   rP   rF   rQ   rU   r5   r   r   r   r   r   r   r   r   )r[   r\   r]   r+  r  r  r   rX   )re   r(   r)   rC   g  s6    


							


zMyJobsOngoing.get_context_data)rf   rg   rh   ri   rC   r(   r(   )re   r)   r  c  s   r  c                   s(   e  Z d  Z d Z   f d d   Z   S)MyJobsCompletedzmyjobs.htmlc       	         sq  t  t |   j |   } t d  t d  g  } |  j j j d  rY|  j j d } t |  t j j	 d |  j
   } | rYt j j	 d |  j d  } | rYx | D] } t j j	 d |  j
   } | r | j r | j d | j d | j d | j d	 | j j j d
 | j d | j d | j d | j d | j i	  | | d <d | d <q Wt d  d | d <| S)z<This function shows the content on all customer jobs by userzMyJobsCompleted - in get z


r   r   z-idrX   r5   r   r_  r   r`  r   ra  r   r  zCompleted Jobsr  rt  r  )rB   r  rC   rD   r   r   r   r   rG   rH   rP   rF   rQ   rW   r?   rU   r5   r   r   r   r   r   r   r   r   )	r[   r\   r]   r+  r  r  r   rX   ra   )re   r(   r)   rC     s<    


								


z MyJobsCompleted.get_context_data)rf   rg   rh   ri   rC   r(   r(   )re   r)   r    s   r  c                   s(   e  Z d  Z d Z   f d d   Z   S)CustomerDashboardzcustomer_dashboard.htmlc                s   t  t |   j |   } t d  |  j j j d  rG |  j j d } t j j	 d |  j
   } | r t j j	 d |  j d  j
   } | r | | d <d | d <t j j	 d |  j d  d d  } | | d	 <d
 | d <| S)z<This function shows the content on customer dashboard screenzCustomerDashboard - in get r   r   r   rM  z-idNr+   recent_customerjobsrt  dashboard_section)rB   r  rC   rD   r   r   r   r	   rG   rH   rP   r   rv  rF   rQ   )r[   r\   r]   r  r  r  r  )re   r(   r)   rC     s    
$

(

z"CustomerDashboard.get_context_data)rf   rg   rh   ri   rC   r(   r(   )re   r)   r    s   r  c                   s(   e  Z d  Z d Z   f d d   Z   S)CompanyDashboardzcompany_dashboard.htmlc                s   t  t |   j |   } t d  |  j j j d  rG |  j j d } t j j	 d |  j
   } | r t j j	 d |  j d  j
   } | r | | d <d | d <d | d <| S)z;This function shows the content on company dashboard screenzCompanyDashboard - in get r   r   ry  rM  rt  r  )rB   r  rC   rD   r   r   r   r	   rG   rH   rP   rz  rv  )r[   r\   r]   r  r  r{  )re   r(   r)   rC     s    
$


z!CompanyDashboard.get_context_data)rf   rg   rh   ri   rC   r(   r(   )re   r)   r    s   r  c               @   s   e  Z d  Z d d   Z d S)UserVerificationsc       	      C   s  t  d  t  d  t  d  |  j j j d  rC |  j j d } t |  j j  } | j d  d } i  } | d k r t j j	 d |  j
   } n] | d k r t j j	 d |  j
   } d	 } n- | d
 k r t j j	 d |  j
   } d } | rd | _ | j   | d k r#d } n0 | d k r8d	 } n | d
 k rMd } n d } | j | j d <| | j d <t t |   St t |   Sd  S)Nz

zUserverification - in getr   r   r"   r   emailverificationlinkry  zcompany-dashboardr8   forgot_password_linkzdriver-dashboardTzcustomer-loginrM  )rD   r   r   r   rK   r   r   r   rG   rH   rP   rz  rM   emailverifiedrZ   r   r   r   )	r[   r   rY  linkrM  r]   r  urlnameurl_valr(   r(   r)   r|     s<    


		
			zUserVerifications.getN)rf   rg   rh   r|   r(   r(   r(   r)   r    s   r  c               @   s.   e  Z d  Z d Z d d   Z d d   Z d S)VerifyForgotPasswordzverify_forgot_password.htmlc       	      O   s   i  } t  |  j j  } | j d  d
 } | j d  d } t j j d |  j   } t j j d | d |  j   } | r d | d <n
 d	 | d <t	 | d  | S)Nr   r   r"   r   r   r  TZ
user_existF)
rK   r   r   r   r	   rG   rH   rP   rM   rD   )	r[   r   r\   r]   r  
ran_string
user_emailr  r_   r(   r(   r)   rC     s    !
z%VerifyForgotPassword.get_context_datac             O   s   i  } | j  d } | j  d } | j  d } | j d  d } | j d  d }	 t j j d |	  j   }
 t j j d |
 d	 |  j   } | r |
 j |  |
 j   d
 | d <d | d <n d | d <d | d <t	 t
 j |   S)NpassZ	conf_passlink_urlr   r   r"   r   r   r  Trc   r   r   Fr  r  )r   r   r	   rG   rH   rP   rM   set_passwordrZ   r   r   dumps)r[   r   r   r\   r]   passwordZ
c_passwordr  r  r  r  r_   r(   r(   r)   r%    s     !



zVerifyForgotPassword.postN)rf   rg   rh   ri   rC   r%  r(   r(   r(   r)   r    s   r  c                   s(   e  Z d  Z d Z   f d d   Z   S)UserVerificationDriverzuserpageverification.htmlc       	         s  t  t |   j |   } t d  |  j j j d  rG |  j j d } t |  j j  } | j	 d  d } | d k r t
 j j d |  j   } n] | d k r t j j d |  j   } d } n- | d	 k r t j j d |  j   } d
 } | rrd | _ | j   | d k r+d | d <d } n: | d k r@d } n% | d	 k r_d | d <d
 } n d } d | d <n
 d | d <| S)NzUserVerificationDriver - in getr   r   r"   r   r  ry  zcompany-dashboardr8   zdriver-dashboardTrc   r+  zcustomer-loginrG  )rB   r  rC   rD   r   r   r   rK   r   r   r   rG   rH   rP   rz  rM   r  rZ   )	r[   r\   r]   rY  r  rM  r  r  r  )re   r(   r)   rC   J  s:    
		

		
	
z'UserVerificationDriver.get_context_data)rf   rg   rh   ri   rC   r(   r(   )re   r)   r  G  s   r  c                   s(   e  Z d  Z d Z   f d d   Z   S)UserVerificationzuserpageverification.htmlc       	         sv  t  t |   j |   } t d  |  j j j d  rG |  j j d } t |  j j  } | j	 d  d } | d k r t
 j j d |  j   } n] | d k r t j j d |  j   } d } n- | d	 k r t j j d |  j   } d
 } | rhd | _ | j   | d k r+d | d <d } n0 | d k r@d } n | d	 k rUd
 } n d } d | d <n
 d | d <| S)NzUserverification - in getr   r   r"   r   r  ry  zcompany-dashboardr8   zdriver-dashboardTrc   r+  zcustomer-loginrG  )rB   r  rC   rD   r   r   r   rK   r   r   r   rG   rH   rP   rz  rM   r  rZ   )	r[   r\   r]   rY  r  rM  r  r  r  )re   r(   r)   rC   s  s8    
		

			
z!UserVerification.get_context_data)rf   rg   rh   ri   rC   r(   r(   )re   r)   r  p  s   r  c                   s4   e  Z d  Z d Z d d   Z   f d d   Z   S)CustomerLoginzcustomer_login.htmlc             O   s  y=t  d  t  | j  | j j d  } | j j d  } | j j d  } | sl 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	 r&| j j d  } t j j d |  \ }	 }
 | d k rt	 j j
 d |  j   } | r| j d k rDt d d d d i  S| j rct d d d d i  S| | j d <| | j d <t | j  \ } } | d k rt  |  n | d k rt  |  t d d d d d | j d | j d | j j d |	 j d | d d d | i	  St d d d d  i  St d d d d  i  SWnR t k
 r} z2 t  d! |  t d d" d d# t |  i  SWYd d } ~ Xn Xd S)$zHThis function is used for the login process for customer or company userzCustomerLogin Web - in postrM  r   r  r   i  r   zUser Role is requiredzEmail address is requiredzPassword is requiredr   Nnextr   r   Fo   zPlease verify your email first.r   zUser is disabled by Admin.rc   rG  r   rL   rj  r   tokenunread_notifications_countzcustomer login successfullredirectlinki  zInvalid Credentials.zerror isi  zException occurred : )rD   r   r|   r   r   GETr
   rG   get_or_creater   rH   rP   r  
isdisabledr   r   r5   rL   rj  r   r;   r   rK   )r[   r   r   r\   rn  r  password_valr   r  r  r1   r  resultr  rG  r(   r(   r)   r%    sH    
	
OzCustomerLogin.postc                s   t  t |   j |   } t d  |  j j   } |  j j j d  } | sU d } n | j d  } t	 | d  } | | d <| S)z/This function shows the content on login screenzCustomerLogin-in get r  rk   =r   r  r  )
rB   r  rC   rD   r   get_full_pathr  r|   r   rK   )r[   r\   r]   fullpathr   )re   r(   r)   rC     s    
	
zCustomerLogin.get_context_data)rf   rg   rh   ri   r%  rC   r(   r(   )re   r)   r    s   @r  c               @   s   e  Z d  Z d d   Z d S)RegistrationOTPc          !   O   s~  y2t  d  t  d  t  | j  t  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  S| d k r| 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  St j j d |  j   } | ry t j j d | d d  } | r3t d	 d d d i  St j j d | d d  } | rjt d	 d  d d! i  St d	 d d d" i  SWq1t	 k
 r} z% t  |  t d	 d d d# i  SWYd$ d$ } ~ Xq1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| d0 k rt j j d | d | d | d | d | d1 |  } | r1t d	 d  d d! i  Sn t d	 d
 d d2 i  SWnE t	 k
 ry} z% t  |  t d	 d3 d d4 i  SWYd$ d$ } ~ Xn Xd$ S)5zGThis class sends the OTP on customer mobile at the time of registrationzRegistrationOTP Web - in postr2   rM  rL   r   ri  rj  r  r   i  r   zUser Role is requiredzName is requiredzEmail Address is requiredzCountrycode is requiredzPhone number is requiredzPassword is requiredr8   r7   vehiclenumberpreferredareazVehicle Type is requiredzVehicle Number is requiredzPreferred Area is requiredr   r   r  Ti  zUser already exists.Fr   z8A verification link has been sent to your email address.z0A driver with this email address already exists.zUser exists.Nrk   c             S   s)   g  |  ] } t  j t j t j   q Sr(   )rl   rm   rn   ro   rp   )rq   rr   r(   r(   r)   rs   "  s   	 z(RegistrationOTP.post.<locals>.<listcomp>   z/user/z/verify/r   z-
Verify your account through following link:
zEmail verification:ztmpython4esf@gmail.comfail_silentlyr   r  zUser Role is not definedi  zInternal Server Error)rD   r   r|   r   r	   rG   rH   rP   r   r   create_userr}   r~   rK   r   r   r?  r   r   )r[   r   r   r\   rn  rp  r  r  rq  r  r  vehiclenumber_valpreferredarea_valr  customer_emailverified_objcustomer_emailnotverified_objr  r   baselinkcompletelinkrS  rd   r  r(   r(   r)   r%    s    



,!"#

$3

zRegistrationOTP.postN)rf   rg   rh   r%  r(   r(   r(   r)   r    s   r  c                   s4   e  Z d  Z d Z d d   Z   f d d   Z   S)CustomerRegistrationzcustomer_registration.htmlc             O   s  y| j  j d  } | s1 t d d d d i  S| j  j d  } | s_ t d d d d i  S| j  j d  } | s t d d d d	 i  S| j  j d
  } | s t d d d d i  S| j  j d  } | s t d d d d i  Sd | k r d | } | j  j d  }	 |	 s-t d d d d i  S| j  j d  }
 |
 s[t d d d d i  S| j  j d  } | st d d d d i  St j j d |  j   } | rt d d d d i  S| j  j d  } | st d d d d i  St j j d | |	 d d d |  j   } | rt j j	 t
 j d   } | | j k rn| | j k rnd | _ | j   t j j d | d
 | d |
 d | d |  } | rX| d  k rt j j d! | d | d |	 d |  } | rXt d d" d d# i  Snh | d$ k rBt j j d! | d | d |	 d |  } | rXt d d" d d# i  Sn t d d d d% i  St d d d d& i  St 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)+zFThis class saves the registration details of customer or company usersrM  r   r   r   zUser Role is required	firstnamezFirst Name is requiredlastnamezLast Name is requiredr   zEmail Address is requiredri  zCountrycode is requiredr}  rj  zPhone number is requiredr  zPassword is requiredaddresszAddress is requiredr   zUser exists.r   zOTP is requiredr  r   r   UTCT
first_name	last_namer   r   r   zRecord added successfully.ry  zRecord not created.zSome backend error occurred.zOTP has been expired.zInvalid OTP.zInternal Server ErrorN)r   r|   r   r	   rG   rH   rP   r   r   r   r   r   r   r   r   rZ   r  r   r   rz  r   rD   )r[   r   r   r\   rn  firstname_vallastname_valr  r  rq  r  address_valr  r   r!  currentdatetimer  r{  r  r(   r(   r)   r%  A  sp    
+	
-''
zCustomerRegistration.postc                s&   t  t |   j |   } t d  | S)NzCustomerRegistration-in get )rB   r  rC   rD   )r[   r\   r]   )re   r(   r)   rC     s    
z%CustomerRegistration.get_context_data)rf   rg   rh   ri   r%  rC   r(   r(   )re   r)   r  >  s   ?r  c               @   s   e  Z d  Z d d   Z d S)Logoutc             C   s   t  d  |  j j j d  r, |  j j d =d } |  j j j d  rd |  j j d } |  j j d =| d k s| | d k r t t d   S| d k s | d k r t t d	   St t d   Sd
 S)zLThis function performs the logout operation by deleting all session elementszLogout-in get r   r   rM  r8   zcustomer-loginadmin
superadminzadmin-loginN)rD   r   r   r   r   r   )r[   r   rM  r(   r(   r)   r|     s    
z
Logout.getN)rf   rg   rh   r|   r(   r(   r(   r)   r    s   r  c                   s(   e  Z d  Z d Z   f d d   Z   S)Indexz
index.htmlc                s   t  t |   j |   } t d  |  j j j d  r |  j j d } | d k rc t t d   S| d k r t t d   S| d k r t t d   S| d	 k r t t d
   S| d k r t t d   St t d   Sn | Sd  S)NzIndex-in get rM  r   zcustomer-dashboardry  zcompany-dashboardr8   zdriver-dashboardr  zadmin-dashboardr  zsuperadmin-dashboardzcustomer-login)	rB   r  rC   rD   r   r   r   r   r   )r[   r\   r]   rM  )re   r(   r)   rC     s     
zIndex.get_context_data)rf   rg   rh   ri   rC   r(   r(   )re   r)   r    s   r  c                   s(   e  Z d  Z d Z   f d d   Z   S)AboutUszaboutus.htmlc                s&   t  t |   j |   } t d  | S)NzAboutUs-in get )rB   r  rC   rD   )r[   r\   r]   )re   r(   r)   rC     s    
zAboutUs.get_context_data)rf   rg   rh   ri   rC   r(   r(   )re   r)   r    s   r  c                   s(   e  Z d  Z d Z   f d d   Z   S)TutorialViewztutorial.htmlc                s&   t  t |   j |   } t d  | S)NzTutorialView-in get )rB   r  rC   rD   )r[   r\   r]   )re   r(   r)   rC     s    
zTutorialView.get_context_data)rf   rg   rh   ri   rC   r(   r(   )re   r)   r    s   r  c                   s4   e  Z d  Z d Z   f d d   Z d d   Z   S)ChangePasswordzchangepassword.htmlc                s   t  t |   j |   } t d  d } |  j j j d  r |  j j d } t j j	 d |  j
   } | r t j j	 d |  } | r d } n! t j j	 d |  } | r d } | | d <| S)NzChangePassword-in get rk   r   r   r   r8   rM  )rB   r  rC   rD   r   r   r   r	   rG   rH   rP   r   rM   )r[   r\   r]   rM  rY  r  r  r_   )re   r(   r)   rC     s    
	
zChangePassword.get_context_datac       
      O   sz  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|  j j j d  r-|  j j d } t j j d |  } | j	 |  rt  d  t
 |  | _ | j   t d d d d i  St  d  t d d d d i  SWnE t k
 ru}	 z% t  |	  t d d d d i  SWYd  d  }	 ~	 Xn Xd  S)Nz



aazdata is  : rM  oldpasswordnewpasswordr   i  r   zPlease enter old passwordzPlease enter new passwordr   zcorrect passwordr   rc   zinvalid passwordzOld password is incorrecti  zInternal Server Error)rD   r   r|   r   r   r   r   r	   rG   check_passwordr   r  rZ   r   )
r[   r   r   r\   rn  oldpassword_valnewpassword_valrY  r  r  r(   r(   r)   r%    s.    




zChangePassword.post)rf   rg   rh   ri   rC   r%  r(   r(   )re   r)   r    s   r  c                   s4   e  Z d  Z d Z   f d d   Z d d   Z   S)ForgotPasswordzforgotpassword.htmlc                s   t  t |   j |   } t d  d } |  j j j d  r |  j j d } t j j	 d |  j
   } | r t j j	 d |  } | r d } n! t j j	 d |  } | r d } | | d <| S)NzForgotPassword-in get rk   r   r   r   r8   rM  )rB   r  rC   rD   r   r   r   r	   rG   rH   rP   r   rM   )r[   r\   r]   rM  rY  r  r  r_   )re   r(   r)   rC   	  s    
	
zForgotPassword.get_context_datac             O   s  ye| 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 |  j   } | rNt j j d |  j   } | r8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)NrM  r   r   r   r   zUser Role is requiredr1   i  rS  zEmail Address is requiredr   rk   c             S   s)   g  |  ] } t  j t j t j   q Sr(   )rl   rm   rn   ro   rp   )rq   rr   r(   r(   r)   rs   *  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	   rG   rH   rP   rM   r}   r~   rK   r   r   r?  r  rZ   r   r   rD   )r[   r   r   r\   rn  r  r  r_   ran_numr  r  rS  r  r(   r(   r)   r%    s.    "#
	
"
zForgotPassword.post)rf   rg   rh   ri   rC   r%  r(   r(   )re   r)   r    s   r  )Rdjango.shortcutsr   django.views.generic.baser   r   django.httpr   r   r   django.contrib.authr   django.contrib.auth.modelsr	   rest_framework.authtoken.modelsr
   rest_framework.viewsr   
decoratorsr   r   r   django.utils.decoratorsr   Customer.modelsCustomer.commonfunctionsr   Driver.modelsZAdminApp.modelsZAdminApp.adminfunctionsr   r   django.urlsr   rE   rl   r   r   rn   django.confr   django.core.mailr   r   r;  r   commonfunctionsr   r   django.contrib.auth.hashersr   sysr   rj   r'  rI  rP  rZ  rl  rr  rs  rx  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r(   r(   r(   r)   <module>   s   


<| f.Q'&$$)'C)(RTH
>