
Ϝ^4                @   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	 d  d l
 m Z d  d l m Z d  d l Td  d l Td  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 m Z d  d l m Z d  d l m Z d  d l m Z d  d	 l 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$ m% Z% d  d l& m' Z' d  d l( m) Z) d  d	 l* Z* d  d	 l+ 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 Gd" d#   d# e  Z4 Gd$ d%   d% e  Z5 Gd& d'   d' e  Z6 Gd( d)   d) e  Z7 Gd* d+   d+ e  Z8 Gd, d-   d- e  Z9 Gd. d/   d/ e  Z: Gd0 d1   d1 e  Z; Gd2 d3   d3 e  Z< Gd4 d5   d5 e  Z= Gd6 d7   d7 e  Z> Gd8 d9   d9 e  Z? Gd: d;   d; e  Z@ Gd< d=   d= e  ZA Gd> d?   d? e  ZB Gd@ dA   dA e  ZC GdB dC   dC e  ZD GdD dE   dE e  ZE d	 S)F    )render)APIView)JsonResponse)csrf_exempt)User)authenticate)Token)*N)	timedelta)settings)	send_mail)BytesIO)Image)getunreadnotificationcountsendfcmnotificationgenerateparcelpdf)FCMNotification)make_passwordc               @   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       2   E   O   s>  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 j |  } t  d  d }	 t  d  t j j d |  j   }
 t  d  |
 rt  d  |
 j	 } t
 j j d |  j   } t  d  | rt  d  x{| D]Z} 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   }# |# r3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 d8 |
 j d/ |$ j d9 d1 d2 d3 d4 d: d6 d7  Wn/ t k
 rg}% 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  dA  y | d@ |$ j  t  dA  Wn/ t k
 r=}% z t  |%  WYd  d  }% ~% Xn Xy t |$ j  }' t  |'  Wq3t k
 r}% z t  |%  WYd  d  }% ~% Xq3Xq3Wqt dB dC dD dE i  Sn t dB dC dD dE i  St j j   j }( t dB dF dD dG dH |( i  St dB dC dD dI i  St dB dF dD dJ i  SydK d   } d dL d  } | j j d  } | j j dM  }) | 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 dN  }* | j j d$  } | j j d%  } | j j d&  }  | j j d'  }! | j j d(  }" | st dB dC dD dE i  S| s5t dB dC dD dO i  S| sQt dB dC dD dP i  S| smt dB dC dD dQ i  S| st dB dC dD dR i  S| st dB dC dD dS i  S| st dB dC dD dT i  S| st dB dC dD dU i  S| st dB dC dD dV i  S| s	t dB dC dD dW i  S| s1	t dB dC dD dX i  S| sM	t dB dC dD dY i  S|  si	t dB dC dD dZ i  S|! s	t dB dC dD d[ i  S|) r
yX t  |)  d\ t _ t j j d] t t  |!  d^  d_ d` da db dc |)  }+ t  |+  Wn2 t k
 r
}% z t  dd |%  WYd  d  }% ~% Xn Xd }	 t  d  t j j d |  j   }
 t  d  |
 rt  d  |
 j	 } t
 j j d |  j   } t  d  | r$t  d  t j j d) |   j   }# |# r$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 d8 |
 j d/ |$ j d9 d1 d2 d3 d4 d: d6 d7  Wn/ t k
 r}% z t  |%  WYd  d  }% ~% Xn Xy t | j d. d; d< d=  Wn/ t k
 rd}% z t  |%  WYd  d  }% ~% Xn X|" rd> |" }& t  d?  | |& d@ |$ j t  dA  y | d@ |$ j  t  dA  Wn/ t k
 r}% z t  |%  WYd  d  }% ~% Xn Xt dB dF dD dG dH |$ j i  Sn t dB dC dD dE i  St dB de dD df i  St! j j dg dh  j   }, |, r[| swt dB dC dD dE i  St j j   }
 t! j j dg t"  j   }, |, rt
 j j d8 |, di d1  j   } | rt# j j dj dk dl t$  j   }- |- r|- j% }. |- j& }/ t  |.  t  |/  t' t( j)  }0 t* j* j+ t, j- |0   }1 t  |1  |1 |. k r|1 |/ k  rd1 |- _. |- j   t dB dF dD dm i  St dB dn dD do i  Sqt dB dn dD dp i  Sqt dB dn dD dq i  Sn t dB dr dD dE i  SWnE t k
 r9}% z% t  |%  t dB de dD df i  SWYd  d  }% ~% Xn Xd  S)sNz

zPlaceOrderTest API - in postc       
      S   s}  yG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 t  d  t  d	  n4 t  d  t  d
  | j d  | j | d d | j d d t	 |    } | j | d d d d t	 | j  d } | | _ | j   d SWn/ t k
 rx}	 z t  |	  WYd  d  }	 ~	 Xn Xd  S)Nr   id c             S   s)   g  |  ] } t  j t j t j   q S )randomchoicestringascii_lettersdigits).0nr   r   M/home/development/Documents/Good_Delivery/GoodsDelivery/API_Customer/views.py
<listcomp>-   s   	 z?PlaceOrderTest.post.<locals>.generateqrcode.<locals>.<listcomp>   z/media/CustomerJobs/z



zdirectory existszdirectory not existsmodei  contentzAWB-z/qrcode.pngscale   1)printpyqrcodepngosCustomerJobobjectsgetjoinrangestrr   BASE_DIRr   pathexistsumaskmakedirscreateqrcodesave	Exception)
id_valr(   r)   r*   customerjob_objstfilepathurlfilenameer   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 } x1 | D] }  j |  qWWn  j   d d |	 j |  }
 |
 j d d g |	 j  } |
 j   d d |  } d t | j  d d | } | | _ | j   d S)Nz;base64,r   /   )r   r   r   c                s)   g  |  ] }   j   j  j   q Sr   )r   r   r   )r   r   )r   r   r   r   r    Q   s   	 zBPlaceOrderTest.post.<locals>.getI420FromBase64.<locals>.<listcomp>r!   z/media/CustomerJobs/c                s%   g  |  ] }  j  j   |   q Sr   )r2   r.   )r   f)r=   r*   r   r   r    U   s   	 r"   i  i  zparcelimage.r&   )r'   splitr0   base64	b64decoder   PILr   r   r   r*   openr+   r,   r-   r.   r/   ThumbnailSizeallr   r1   r   r2   r3   listdirremover5   	thumbnail	ANTIALIASr8   image)codecr:   
image_pathbase64_dataextensext	extension	byte_data
image_datar   imgr;   r<   thumbnailsize_objsfilesToRemoverD   imr?   r   )r=   r*   r   r   r   getI420FromBase64D   s6    


$+ %	
z.PlaceOrderTest.post.<locals>.getI420FromBase64session_tokenparcels_datanoofparcels0r&   rC   key2user__id34

sendernamesendercountrycodesenderphonepickupaddress
sendercitywidthheightweight
parceltypespecialnoterecipientnamerecipientcountrycoderecipientphonedropaddresssenderlatitudesenderlongituderecipientlatituderecipientlongitudevehicletypepriceimagebase64name5pickupspecialnotedropoffaddressdeliverydurationcustomercustomerjobidforcustomerTnotificationtypezParcel Job Creatednotificationtextz"You have created one parcel order.statusunreaduser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   r   r   c             S   s)   g  |  ] } t  j t j t j   q Sr   )r   r   r   r   r   )r   r   r   r   r   r       s   	 z?PlaceOrderTest.post.<locals>.generateqrcode.<locals>.<listcomp>r!   z/media/CustomerJobs/r#   zAWB-z/qrcode.pngr$   r%   r&   )r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r   r1   r   r2   r3   mkdirr6   r7   r8   )	r:   r(   r)   r*   r;   r<   r=   r>   r?   r   r   r   rA      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   rB   rC   )r   r   r   c                s)   g  |  ] }   j   j  j   q Sr   )r   r   r   )r   r   )r   r   r   r   r       s   	 zBPlaceOrderTest.post.<locals>.getI420FromBase64.<locals>.<listcomp>r!   z/media/CustomerJobs/c                s%   g  |  ] }  j  j   |   q Sr   )r2   r.   )r   rD   )r=   r*   r   r   r      s   	 i  zparcelimage.r&   )r'   rE   r0   rF   rG   r   rH   r   r   r   r*   rI   r+   r,   r-   r.   r/   rJ   rK   r   r1   r   r2   r3   rL   rM   r   rN   rO   r8   rP   )rQ   r:   rR   rS   rT   rU   rV   rW   rX   r   rY   r;   r<   rZ   r[   rD   r\   r?   r   )r=   r*   r   r   r   r]      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 = i  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  )/r'   POSTr-   jsonloadsr   r,   filterfirstuser_idCustomerVehicleTyper+   r6   rv   rw   rx   ry   r8   Notificationsr   r   r9   r   fcmtokenr   r   laststripeapi_keyChargeintfloatr   	email_valOTPotp_valstartdatetimeexpiredatetimer0   r   	TIME_ZONEdatetimenowpytztimezoneverified)2selfrequestargskwargsrA   r]   session_token_valr_   noofparcels_valdeliveryduration_val	token_objr   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;   r@   rQ   resZlastcustomerjobidr   recipientspecialnote_valchargeuser_objotp_objst_timeex_timer   timer   r   r   post   s   



"




	


























				
.;


$!
		 


	


				
.;


"!!		


	

zPlaceOrderTest.postN)__name__
__module____qualname____doc__r   r   r   r   r   r      s   r   c               @   s.   e  Z d  Z d Z d d   Z d d   Z d S)TestzBThis class is used for login process for company or customer usersc             O   s   y t  d  d } d } d } d } d d d d	 d
 d d d d d i } t d |  j d | d | d | d |  }	 t  |	  t d d d d i  SWnH t k
 r }
 z( t  d |
  t d d d d i  SWYd  d  }
 ~
 Xn Xd  S)NzTest API - in postzAAAA5-TDUdg:APA91bG1Za_SqVuUDn3ZcqfAeelG76kvXmkOA_wN0tGU-OQg0LKA5GzDX_aYcP8StTTOKohjQXkWslYJRfnZGYMkygM_qCjtc_heesrg8ubPWha8C4pqgg9t8253RA7jAPbcA9H74_skzfvAUR5HPo1g:APA91bEC8q_0bt2rrXljTq5ZtMGDRhIyJ4XEs83AUziMRWkHwDZwEJfpfYtncoTxSxdWrhRSmVeR6f9ZZJFu36JMXJQrPqPyLNqIixUoUL0c_kqNWpAFiX9UQnOfQdZxKC1W2DcCsjoBZTitleZBodyappnormaltypeprofile
sendparcelnotitleAirdelymessagez$Your profile is updated successfullyr   registration_idmessage_titlemessage_bodydata_messager   r   r   successzerror isi  zInternal Server Error)r'   r   notify_single_devicer   r9   )r   r   r   r   
server_keyZ	fcm_tokenr   r   r   resulterrorr   r   r   r-     s"    
-
zTest.getc             O   s   y: t  d  t d  } t  |  t d d d d i  SWnE t k
 r } z% t  |  t d d d d i  SWYd  d  } ~ Xn Xd  S)	NzTest - post   r   r   r   r   i  zInternal Server Error)r'   r   r   r9   )r   r   r   r   r   r@   r   r   r   r     s    


z	Test.postN)r   r   r   r   r-   r   r   r   r   r   r     s   -r   c               @   s   e  Z d  Z d d   Z d S)SendSupportQueryc       	      O   s8  t  d  t  d  t  d | j  y | j j d  } | j j d  } | sg t d d d d	 i  S| } yL t  |  t d
 | d d g d d } t  |  t d d d d i  SWn/ t k
 r } z t  |  WYd  d  } ~ Xn XWnE t k
 r3} z% t  |  t d d d d i  SWYd  d  } ~ Xn Xd  S)Nz



zSendSupportQuery - post zdata is  : r^   queryr   i  r   zPlease enter queryzHelp and Support:ztmpython4esf@gmail.comztest@yopmail.comfail_silentlyFr   zRequest sent.i  zInternal Server Error)r'   r   r-   r   r   r9   )	r   r   r   r   r   	query_valr   r   r@   r   r   r   r     s&    



!
zSendSupportQuery.postN)r   r   r   r   r   r   r   r   r     s   r   c               @   s   e  Z d  Z d d   Z d S)ChangePasswordc             O   s$  t  d  t  d | j  y| 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  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^   userroleZoldpasswordnewpasswordr   i  r   zUser not logged inzPlease enter old passwordzPlease enter new passwordrb   r   zcorrect passwordr   r   Zpasswordchanger   z%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   passwordr8   r   r   r   r9   )r   r   r   r   r   userrole_valZoldpassword_valZnewpassword_valr   r   r   r@   r   r   r   r     sB    




zChangePassword.postN)r   r   r   r   r   r   r   r   r     s   r   c               @   s   e  Z d  Z d d   Z d S)GetUnreadNotificationsCountc       	      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%GetUnreadNotificationsCount - in get r^   r   i  r   zUser not logged inrb   r   r   r   unread_notifications_counti  zInternal Server ErrorN)r'   GETr-   r   r   r,   r   r   r   r   r9   )	r   r   r   r   r   r   r   countr@   r   r   r   r-   H  s"    


zGetUnreadNotificationsCount.getN)r   r   r   r-   r   r   r   r   r  F  s   r  c               @   s   e  Z d  Z d d   Z d S)CustomerNotificationsc             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CustomerNotifications - in get r^   r   i  r   zUser not logged inrb   r   r   deletedFz-idr   r   r   r   dater   datar   i  zInternal Server ErrorN)r'   r  r-   r   r   r,   r   r   r   r   r   order_byappendr   r   r   r   r   r  r9   )r   r   r   r   r   r   r   Znotifications_dataZall_notificationsZnotificationr@   r   r   r   r-   `  s6    
$					
zCustomerNotifications.getN)r   r   r   r-   r   r   r   r   r	  ^  s   r	  c               @   s"   e  Z d  Z d Z d d   Z d S)GetParcelWeightsz,This class is used to get all vehicle types c             O   s   y t  d  g  } t j j d d  } | j d d d d i  | j d d d d	 i  | j d d
 d d i  | j d d d d i  t  |  t d d d d d | i  SWnE t k
 r } z% t  |  t d d d d i  SWYd  d  } ~ Xn Xd  S)NzGetParcelWeights API - in get	isdeletedFr   rC   ro   zLess than 5 kg   z"More than 5 kg but less than 20 kg   z#More than 20 kg but less than 50 kg   zMore than 50 kgr   r   r   r   r  i  zInternal Server Error)r'   r   r,   r   r  r   r9   )r   r   r   r   r  allvehicletypesr@   r   r   r   r-     s*    

 
zGetParcelWeights.getN)r   r   r   r   r-   r   r   r   r   r    s   r  c               @   s"   e  Z d  Z d Z d d   Z d S)GetVehicleTypesz,This class is used to get all vehicle types c             O   s   y t  d  g  } t j j d d  } | r^ x- | D]% } | j d | j d | j i  q5 Wt  |  t d d d d	 d
 | i  SWnE t k
 r } z% t  |  t d d d d i  SWYd  d  } ~ Xn Xd  S)NzGetVehicleTypes API - in getr  FZvehicletypeidrz   r   r   r   r   r  i  zInternal Server Error)	r'   r   r,   r   r  r   r}   r   r9   )r   r   r   r   r  r  rz   r@   r   r   r   r-     s    
	
 
zGetVehicleTypes.getN)r   r   r   r   r-   r   r   r   r   r    s   r  c               @   s"   e  Z d  Z d Z d d   Z d S)QuickFareEstimatezBThis class is used for login process for company or customer usersc             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  i  } 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! | j d" | i  d# d$ | f Sd% d& | f SWn< t k
 r} z t |  d% d& | f SWYd  d  } ~ Xn Xd  S)'N r   #z9https://maps.googleapis.com/maps/api/distancematrix/json?zorigins=z&destinations=z&key=rg   r   OKgobyp\D?rowsr   elementsdistancevaluedistanceunitmiler}   rC   bikez/static/images/bike.pngcarz/static/images/car.jpgsmallvanz/static/images/smallvan.png	mediumvanlargevanz/static/images/largevan.jpgrz   r{   r  r   rP   r   r   i  zEnter valid address)r0   r   GOOGLE_API_KEYreplacer'   requestsr-   r   r   r   r,   r   r   fixeddistancebaserater   addittionalrateperunitr}   WEB_BASE_URLupdateroundr   r9   )r   r   r   r  r   r   destr>   rxmultiplicationfactordistanceinmilesr   r  raterP   r@   r   r   r   getquickfareforvehicletype  sZ    "'

(!	@
z:QuickFareEstimate.post.<locals>.getquickfareforvehicletyperk   ru   rz   r   i  r   zpickupaddress is requiredzdropaddress is requiredzvehicletype is requiredr  zerror isi  zInternal Server Error)r'   r   r-   r   r9   )r   r   r   r   r4  r   r   r   r   r   r  r   r   r   r   r     s"    
= zQuickFareEstimate.postN)r   r   r   r   r   r   r   r   r   r    s   r  c               @   s   e  Z d  Z d d   Z d S)GetParcelTypesc             C   s   yq t  j j d d  } g  } | rT x- | D]% } | j d | j d | j i  q+ Wt d d d | d d	 i  SWnE t k
 r } z% t |  t d d
 d d i  SWYd d } ~ Xn Xd S)z0 This API method is used to get all parcel typesr  Frp   r   r   r   r  r   r   i  zInternal Server ErrorN)	
ParcelTyper,   r   r  rp   r   r   r9   r'   )r   r   ZallparceltypesZallparceltypes_datarp   r@   r   r   r   r-     s    	 
zGetParcelTypes.getN)r   r   r   r-   r   r   r   r   r5    s   r5  c               @   s   e  Z d  Z d d   Z d S)OngoingRequestsc          2   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]
}
 y d t d |
 j  } Wn5 t k
 r} z t  |  d } WYd d } ~ Xn X|
 j sd } n t t j  |
 j j } i  } d } t j j d |
  j   } | rd } | j d k r:| j d | j j d | j j d | j j d | j j i  d } | j d |
 j d |
 j d |
 j d |
 j d |
 j  d |
 j! d  |
 j" d! |
 j# d" |
 j$ d# | d$ | d% |
 j d& | d' | i  q0| j d |
 j d |
 j d |
 j d |
 j d |
 j  d |
 j! d  |
 j" d! |
 j# d" |
 j$ d# | d$ | d% |
 j d& | d' | i  q0Wt d d( d) | d* | d d+ i  St d d( d) g  d d+ i  Sq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)0z4 This API method is used to get profile data of userzdata is  : r^   r   i  r   zUser not logged inrb   r   ra   r   r&   r  Fr   r   rc   zAWB-i'  NcustomerjobT
drivernamedrivercountrycodedriverphonedriveridrv   rw   rx   ry   rh   rj   senderpickupaddressrr   recipientdropoffaddressparcelimage	awbnumberr   driverexistdriverdetailsr   r  support_phoner   i  zUser not logged in.i  zInternal Server Error)%r'   r  r-   r   r   r,   r   r   r   r   r   SupportDetailphoner+   lenr0   r   r9   rP   r   r+  r}   	DriverJobjobcompletedr,  drivercountrycoder  rv   rw   rx   ry   rh   rj   rk   rr   r   )r   r   r   Zongoingcustomerjobs_datar   r   r   supportdetail_objrC  r;   jobr@  r@   r?  driverjob_datarA  driverjob_objr   r   r   r-   %  s    



																						" 
zOngoingRequests.getN)r   r   r   r-   r   r   r   r   r7  #  s   r7  c               @   s   e  Z d  Z d d   Z d S)CompletedRequestsc          *   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 |	   xf|	 D]^}
 y d t d |
 j  } Wn5 t k
 r} z t  |  d } WYd d } ~ Xn X|
 j sd } n t t j  |
 j j } i  } d } t j j d |
  j   } | r0d } | j r0| j d | j j d | j j d | j j d | j j i  d } | j d |
 j d |
 j d |
 j d |
 j d |
 j  d | d  | d! |
 j d" | d# | i
  q0Wt d d$ d% | d& | d d' i  St d d$ d% g  d d' i  Sqt d d d% g  d d i  Sn t d d( d% g  d d) i  SWnE t k
 rV} 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 inrb   r   ra   r   r&   r  Fr   r   rc   zAWB-i'  Nr8  Tr9  r:  r;  r<  rh   rj   r=  rr   r>  r?  r@  r   rA  rB  r   r  rC  r   i  zUser not logged in.i  zInternal Server Error)!r'   r  r-   r   r   r,   r   r   r   r   r   rD  rE  r+   rF  r0   r   r9   rP   r   r+  r}   rG  rH  r,  rI  rJ  r  rh   rj   rk   rr   r   )r   r   r   Zcompletedcustomerjobs_datar   r   r   rK  rC  r;   rL  r@  r@   r?  rM  rA  rN  r   r   r   r-     sz    



									" 
zCompletedRequests.getN)r   r   r   r-   r   r   r   r   rO    s   rO  c               @   s   e  Z d  Z d d   Z d S)AllRequestsc             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   } | rkt  d	  t
 j j d
 |  j   } | rLt  d  t j j d d  j   } | r | j } n d } t j j d |  }	 |	 r*t  d  t  t |	   x |	 D] }
 |
 j sHd } n t t j  |
 j j } i  } d } t j j d |
  j   } | r| j d | j j d | j j d | j j d | j j i  d } | j d |
 j d |
 j d |
 j d |
 j d |
 j d | d |
 j d | d | i	  q0Wt d d  d! | d" | d d# i  St d d  d! g  d d# i  Sq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 inrb   r   ra   r   r&   r  Fr   r   rc   r8  r9  r:  r;  r<  Trh   rj   r=  rr   r>  r?  r   rA  rB  r   r  rC  r   i  zUser not logged in.i  zInternal Server ErrorN) r'   r  r-   r   r   r,   r   r   r   r   r   rD  rE  r+   rF  rP   r0   r   r+  r}   rG  r,  rI  rJ  r   r  rh   rj   rk   rr   r   r9   )r   r   r   Zallcustomerjobs_datar   r   r   rK  rC  r;   rL  r?  rM  rA  rN  r@   r   r   r   r-     sj    


								" 
zAllRequests.getN)r   r   r   r-   r   r   r   r   rP    s   rP  c               @   s   e  Z d  Z d d   Z d S)InvoiceScreenDetailc             C   s#  t  d | j  y| j j d  } | j j d  } | sS t d d d d i  S| so 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   } | rd }	 | j d | j j d t | j d  d t |	  d t t | j d   d d d d i  t d d d | d d i  Sqt d d d g  d d i  Sq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   r   i  r   zUser not logged inzCustomerJob id is requiredrb   r   r   g        rz   farer  extrachargesZtotalchargesparcelpdf_linkr   r   u   €r   r  r   i  zUser not logged in.i  zInternal Server ErrorN)r'   r  r-   r   r   r,   r   r   r   r   r   r+   r,  rz   r}   r-  r{   r0   r9   )r   r   r   customerjobid_valcustomerjob_datar   r   r   r;   rS  r@   r   r   r   r-   !  s@     
zInvoiceScreenDetail.getN)r   r   r   r-   r   r   r   r   rQ    s   rQ  c               @   s   e  Z d  Z d d   Z d S)CustomerJobDetailc          5   C   s  t  d | j  yL| j j d  } | j j d  } | sS t d d d d i  S| so 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   } | r| j sd }	 n	 | j }	 | j s)d }
 n	 | j }
 | j sDd } n t t j  | j j } | j so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 |	 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 | j d) d* t d+ | j  d, | d- | i  t d d. d/ | d d0 i  Sq<t d d d/ g  d d i  Sq[t d d d/ g  d d i  Sn t d d1 d/ g  d d2 i  SWnE t) k
 r} z% t  |  t d d3 d d4 i  SWYd5 d5 } ~ Xn Xd5 S)6z4 This API method is used to get profile data of userzdata is  : r^   r   r   i  r   zUser not logged inzCustomerJob id is requiredrb   r   r   r   Fr8  r9  r:  r;  r<  ZdriverjobidTrh   ri   rj   r=  rl   r`   rr   rs   rt   r>  rm   rn   ro   rp   rz   rR  r  r?  rT  r7   r@  zAWB-i'  rA  rB  r   r  r   i  zUser not logged in.i  zInternal Server ErrorN)*r'   r  r-   r   r   r,   r   r   r   r   r   r+   ri   rs   r7   r0   r   MEDIA_BASE_URLr}   rP   rG  r,  rI  rJ  rE  r   rh   rj   rk   rl   r`   rr   rt   r   rm   rn   ro   rp   rz   r-  r{   r9   )r   r   r   rU  rV  r   r   r   r;   ri   rs   r7   r?  rA  rM  rN  r@   r   r   r   r-   U  s    																							 
zCustomerJobDetail.getN)r   r   r   r-   r   r   r   r   rW  S  s   rW  c               @   s"   e  Z d  Z d Z d d   Z d S)LoginzBThis class is used for login process for company or customer usersc             O   s  yHt  d  | j j d  } | j j d  } | j j d  } | s_ t d d d d i  S| 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 d | d |  } | d  k	 r1t j j d |  \ }	 }
 | d k rt j j	 d |  j
   } | r| j d k rSt d d d d i  S| j rr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 d d d  i  SWnR t k
 r} z2 t  d! |  t d d" d d# t |  i  SWYd  d  } ~ Xn Xd  S)$NzCustomerLogin API - in postr   emailr  r   i  r   zUser Role is requiredr   zFcm token is requiredzEmail address is requiredzPassword is requiredr   r   r   Fo   zPlease verify your email first.r   zUser is disabled by Admin.r   r   r   r}   rJ  rE  rP   tokenr  zcustomer login successfulli  zInvalid Credentials.zerror isi  zException occurred : )r'   r   r-   r   r   r   r,   get_or_creater   r   r   emailverified
isdisabledr   r8   r   r   r}   rJ  rE  rP   rb   r9   r0   )r   r   r   r   r  r   password_valfcmtoken_valr   r\  r   r   r   r  r   r   r   r   r     sJ    
		

Rz
Login.postN)r   r   r   r   r   r   r   r   r   rY    s   rY  c               @   s"   e  Z d  Z d Z d d   Z d S)RegisterzEThis API sends the OTP on customer mobile at the time of registrationc          !   O   sm  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  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  } | r"t d	 d d d i  St j j d | d d  } | rY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 r
t j j d | d | d | d | d | d0 |  } | r t d	 d  d d! i  Sn t d	 d
 d d1 i  SWnE t	 k
 rh} z% t  |  t d	 d2 d d3 i  SWYd  d  } ~ Xn Xd  S)4NzRegister API - in postzdata is  : r   r}   rZ  rJ  rE  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 requiredrI  rz   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.r   c             S   s)   g  |  ] } t  j t j t j   q Sr   )r   r   r   r   r   )r   r   r   r   r   r      s   	 z!Register.post.<locals>.<listcomp>   z/user/z/verify/rB   z-
Verify your account through following link:
zEmail verification:ztmpython4esf@gmail.comr   r   emailverificationlinkzUser Role is not definedi  zInternal Server Error)r'   r   r-   r   r   r,   r   r   r   r9   create_userr.   r/   r0   rZ  r   r+  r   r6   )r   r   r   r   r  name_valr   countrycode_val	phone_valr`  r   vehiclenumber_valpreferredarea_valr   Zcustomer_emailverified_objZcustomer_emailnotverified_objr@   r<   ZbaselinkZcompletelinkr   r   r   r   r   r   r     s~    

,!"#

$3
zRegister.postN)r   r   r   r   r   r   r   r   r   rb    s   rb  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 inrb   r   r   r   z:9999r}   rZ  rJ  rE  addressrP   r   r  r   i  zInternal Server ErrorN)r'   r  r-   r   r   r,   r   r   r   r   r   rP   r}   r&  rn  rJ  r,  rZ  rE  r9   )r   r   r   r   r   r   rP   rn  rJ  Zprofile_datar@   r   r   r   r-   4  sH    										 
zGetProfile.getN)r   r   r   r-   r   r   r   r   rm  2  s   rm  c               @   s   e  Z d  Z d d   Z d S)UpdateProfilec       1   5      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 X| j j d&  } | st d d' d d( i  S| d) k rt j j d* | d+ t  } n' | d	 k r:t j j d* | d, t  } y| r	| d' j } | d' j } t  |  t  |  t j j   } t  |  t j d-  } t  d.  | j |  } t  |  t  d/  t  d0  t  d1  | | k r	| | k  r	d' d2 l m } | j j d3  } | r| j } t  d4  t  |  t  d4  | j  d5  } t! | di  } d' d  l" } | j# | j$    } t  d1  t  |  | j% |  } t  d7  d' d  l&   d' d  l'  d8 j(    f d9 d:   t) d;  D  } t* j j+   } t  d<  x | D] } t  | j, | j-  | j% |  } | j. t/ | j,  t/ | j-  g | j0  }  | j t! t1 j2  d= t! | j,  d> t! | j-  d? | d5 |  }  qW| j% |  } | j t! t1 j2  d@ | d5 |  | d5 | } t  |  | j j dA  }! |! s/t d d' d dB i  SdC |! }! | j j d  } | sgt d d' d dD i  S| j j dE  }" |" st d d' d dF i  S| j j dG  }# | j j dH  }$ |$ st d d' d dI i  S| j j dJ  }% |% st d d' d dK i  S| j j dL  }& |& s1t d d' d dM i  S| j j dN  }' |' s_t d d' d dO i  S| j j dP  }( |( st d d' d dQ i  SyS |( j  dR  }( t! |( d6  dR t! |( d'  dR t! |( dS  }( t3 |(  }) Wn t d d' d dT i  SYn Xt  |)  | rit j j d* |  j4 d3 | d |! d | dU |" dV |# dH |$ dJ |% dL |& dN |' dW |)  
nO t j j d* |  j4 d |! d | dU |" dV |# dH |$ dJ |% dL |& dN |' dW |)  	t j j d* |  }* |* d' j }+ t! t1 j5  d@ |* d' j6 j } t  |+  d8 }, d8 }- t  dX  t! t1 j7  }. dY dZ d[ d d\ d] d^ d_ d d! i }/ t8 d` |.  j9 da |+ db |, dc |- dd |/  }0 t  |0  t  de  t d d" d df d3 | i  St d d' d dg i  Sn t d d' d dh i  SWnA t k
 r
} z! t d d' d t! |  i  SWYd  d  } ~ Xn Xd  S)jNz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

ra   z;base64,r&   r   rc   rB   re   rC   rf   r~   67)r   89r   r   c                s)   g  |  ] }   j   j  j   q Sr   )r   r   r   )r   r   )r   r   r   r   r      s   	 zAUpdateProfile.post.<locals>.getI420FromBase64.<locals>.<listcomp>r!   z/media/Users/Customers/_c                s%   g  |  ] }  j  j   |   q Sr   )r2   r.   )r   rD   )r=   r*   r   r   r      s   	 r	   -.z
/original-)%r'   rE   r0   rF   rG   r   rH   r   r   r   r*   rI   r   r,   r-   r.   r/   rJ   rK   r   r1   r   r   rZ  r2   r3   rL   rM   r   rN   r   rn   rm   rO   r8   r+  rP   )rQ   r:   rR   rS   rT   rU   rV   rW   rX   r   rY   r   r<   rZ   r[   rD   objr\   r?   r   )r=   r*   r   r   r   r]   l  sT    












$

+4%-ED	
z-UpdateProfile.post.<locals>.getI420FromBase64r^   r}   rJ  rE  rZ  rn  r|   r   i  r   zUser not logged inzName is requiredr   r   zCountrycode is requiredzPhone Number is requiredzEmail is requiredzAddress is requiredrb   r   r   zdata:image/png;base64,zbefore function callr:   zafter function callr   r   r   z$Your profile is updated successfullyr   zprofile updated successfullyi  zInternal Server ErrorZotponr   zotpon Emptymobiler\  Z	mobileOTPZupdateprofileOTPzAsia/Kolkatara   r&   rc   re   )r   rP   rg   rv  rC   rf   r   c                s)   g  |  ] }   j   j  j   q Sr   )r   r   r   )r   r   )r   r   r   r   r      s   	 z&UpdateProfile.post.<locals>.<listcomp>r!   zbeforee resizingz/media/r	   ru  z/media/original-Zcountry_codezCountry code is required+zMobile number is requiredadd1zAddress line 1 is requiredadd2countryzCountry is requiredstatezState is requiredcityzCity is required
postalcodezPostal code is requireddobzDate of birth is requiredrB   r  z+Date of birth format should be (mm/dd/yyyy)Zaddressline1Zaddressline2Zdateofbirthz####r   r   r   r   r   r   r   r   r   r   r   r   zprofile updatedzProfile updated successfullyzOTP has expiredzInvalid OTP):r'   r   r-   r   r   r,   r   r   r   r   r   r}   rJ  rE  rn  r8   r   r   r   r9   MainUserr   ZupdateprofileOTP_starttimeZupdateprofileOTP_expiretimer   r   r   r   localizerH   r   FILESrE   r0   ior   readrI   r   r   r.   r/   rJ   rK   rn   rm   rN   r   rO   r   r1   parser,  ZBASE_URLrP   FIREBASE_SERVER_KEYr   r   )1r   r   r   r   r]   r   rh  ri  rj  r   address_valr   r   r   r   rQ   r@   Zotponon_valrw  r   r   r   utcr   rP   r?   rV   r  rX   rY   r<   rZ   r\   Zcountry_code_valrz  r{  r|  r}  r~  r  Zdob_valr  main_user_objZmain_user_obj_fcmtokenr   r   r   r   r   r   )r   r   r   r   h  s4   
.				




)







	





+
-N&

4
XO!

-

zUpdateProfile.postN)r   r   r   r   r   r   r   r   ro  f  s   ro  c               @   s   e  Z d  Z d d   Z d S)ForgotPasswordc          !   O   s  t  d  t  d | j  y'| j j d  } | j j d  } | s] t d d d d i  S| sy t d	 d
 d d i  St j j d |  } | r*d } d } x5 t d  D]' }	 | | t j	 t
 j
   d  7} q Wt  d |  t j j t j d   }
 |
 t d d  } d } t j j d | d |  j   } | rh|
 | _ | | _ | | _ | j   n- t j j d | d | d | d |
 d |  } t d d d d d | i  S| d k rd } d } d } t } d  } t d!  } d" | d# <d | d$ <t | d% <t  d&  d' } t  d(  t | d)  } | j |  t  d*  t  d+  z y[ t j d d  } t  t |   | j | |  } | j d t | j     t  d,  Wn/ t! k
 r} z t  |  WYd  d  } ~ Xn XWd  | j"   Xt# j$ d- t d. |
 d/ |  t  d0  t d	 d d t i  St d	 d d d1 i  SWnK t! k
 r} z+ t  |  t d	 d d t% |  i  SWYd  d  } ~ Xn Xd  S)2Nz



zdata is  : r   rZ  r   r   r   zUser Role is requiredr   i  r   zEmail Address is required
0123456789r      
   zOTP of 5 digits:UTCminutes   Zforgotpasswordr   r   r   r   r   zOTP sent on email addressr   i  zmail.airdely.comzcontact@airdely.comZ
airdely118alternativezForgot Password OTPSubjectFromTozbefore htmlzaaaaaaaaaaaa

				z
after htmlhtmlr&   rc   zEmail has been sent succesfullyZforgotpasswordOTPZ	starttimeZ
expiretimere   zEmail does not exist)&r'   r   r-   r   r   r,   r   r/   mathfloorr   r   r   r   r   r
   r   r   r   r   r   r8   r6   ZemailidMIMEMultipartMIMETextattachsmtplibZSMTP_SSLr   loginZsendmail	as_stringr9   quitr  r,  r0   )r   r   r   r   r  r   r   r   r   i
start_timeexpire_timer   r   portZsmtp_serverZsender_emailZreceiver_emailr  r   r  part2serverZaar@   r   r   r   r   Q  sx    
%!			-






!

zForgotPassword.postN)r   r   r   r   r   r   r   r   r  O  s   r  c               @   s   e  Z d  Z d d   Z d S)UpdatePasswordc             O   sf  t  d  t  d | j  y| 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  St j j d |  j   } | r| d k rt d d d	 d i  S| d k r:t d d d	 d i  S|	 d j d k rmt  d  t d d d	 d i  S|	 d j d k rt  d  t	 j
 |  }
 t  |
  t j j d |  }	 |	 r|	 j d |
  t d d d	 d i  St d d d	 d i  Sn t d d d	 d i  SWnK t k
 ra} z+ t  |  t d d d	 t |  i  SWYd  d  } ~ Xn Xd  S)Nz



zdata is  : r   rZ  r   r  r   r   r   zUser Role is requiredzEmail is requiredzOTP is requiredzNew password is requiredr   z%User is disabled. Contact SuperAdmin.companyra   zUser is not registered with us.r&   r  r   zPassword updated successfullyzPassword not updatedzInvalid OTP)r'   r   r-   r   r   r,   r   r   r   handlerhashr  r,  r9   r0   )r   r   r   r   r  rZ  r   r  r   r  Znew_password_valr@   r   r   r   r     sJ    




zUpdatePassword.postN)r   r   r   r   r   r   r   r   r    s   r  c                   s:   e  Z d  Z d Z d Z d d   Z   f d d   Z   S)CustomerRegistrationzJThis API class saves the registration details of customer or company userszcustomer_registration.htmlc             O   s  yMt  d | j  | j j d  } | sA t d d d d i  S| j j d  } | so 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  }
 |
 skt d d d d i  S| j j d  } | st d d d d i  S| d k r2| 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  Snh | d k r| j j d  } | slt d d d d i  S| j j d   } | st d d d d! i  St  d"  t 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   } | r6t	 j	 j
 t j d*   } t  |  t  | j  t  | j  | | j k r| | j k rd+ | _ | j   t j j d# | d | d |
 d, | d- |  } | r| d. k r/t j j d/ | d | d |	 d |  } | rt d d0 d d1 i  Sn | d k rt j j d/ | d | d |	 d | d2 | d  |  } | rt d d0 d d1 i  Snz | d k rt j j d/ | d | d |	 d | d | d | d |  } | rt d d0 d d1 i  Sn t d d d d3 i  St d d d d4 i  St d d d d5 i  Sn t d d d d6 i  SWnK t k
 r} z+ t  |  t d d d t |  i  SWYd  d  } ~ Xn Xd  S)7Nzdata is  : r   r   r   r   zUser Role is requiredZ	firstnamezFirst Name is requiredlastnamezLast Name is requiredrZ  zEmail Address is requiredrJ  zCountrycode is requiredry  rE  zPhone number is requiredr  zPassword is requiredrn  zAddress is requiredrI  rz   zVehicle Type is requiredrc  zVehicle Number is requiredrd  zPreferred Area is requiredr  ZcompanynamezCompany Name is required	tinnumberzTIN Number is requiredra   r   zUser exists.r   zOTP is requiredrx  r   r   r  T
first_name	last_namer   r   r   zRecord added successfully.r}   zRecord not created.zSome backend error occurred.zOTP has been expired.zInvalid OTP.)r'   r   r-   r   r   r,   r   r   r   r   r   r   r   r   r   r   r8   rg  r   r6   CompanyDriverModelr9   r0   )r   r   r   r   r  Zfirstname_valZlastname_valr   ri  rj  r`  r  r   rk  rl  Zcompanyname_valZtinnumber_valr   r   r   Zcurrentdatetimer   Zcompany_objZ
driver_objr@   r   r   r   r     s    

+
	
-'39
zCustomerRegistration.postc                s&   t  t |   j |   } t d  | S)NzCustomerRegistration-in get )superr  get_context_datar'   )r   r   context)	__class__r   r   r  9  s    
z%CustomerRegistration.get_context_data)r   r   r   r   template_namer   r  r   r   )r  r   r    s   Zr  c               @   s"   e  Z d  Z d Z d d   Z d S)GetFareszMThis class is being used to return fares according to different vehicle typesc       #      O   s  y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  } | sIt d d d d i  S| se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| sEt d d d d i  S| sa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 rDd, } t | d- d. d/ d. d0 d1  | } t  |  t j	 j
 d2 d3  } | rZx| D]z} | } | | j k r| j }  n | j }  t  d)  t  | j  t  |   | | j } t  |  | t |  k rP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 | j dB |! i  qWn t d d d dC i  SWnE t k
 r}" z% t  |"  t d d d dC i  SWYd  d  }" ~" Xn Xt d dD d dE dF | i  SWnE t k
 r}" z% t  |"  t d dG d dH i  SWYd  d  }" ~" Xn Xd  S)INzGetFares API- in post r^   rh   ri   rj   rk   rl   r`   rm   rn   ro   rp   rq   rr   rs   rt   ru   r   i  r   zUser not logged in.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  r   r  z9https://maps.googleapis.com/maps/api/distancematrix/json?zorigins=z&destinations=z&key=rg   r   r  gobyp\D?r  r   r  r  r  r  r  rC   r   z*http://13.126.26.12/static/images/bike.pngr!  z)http://13.126.26.12/static/images/car.jpgr"  z.http://13.126.26.12/static/images/smallvan.pngr#  r$  z.http://13.126.26.12/static/images/largevan.jpgrz   r{   r  r   rP   zEnter valid addressr   zSuccess.r  i  zInternal Server Error)r'   r   r-   r   r&  r'  r   r   r   r,   r   r(  r)  r}   r   r*  r  r0   r-  r   r9   )#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/  r0  r1  r2  r   Zvehicler  r3  rP   r@   r   r   r   r   A  s    

"'

(
	




				G
) 
zGetFares.postN)r   r   r   r   r   r   r   r   r   r  ?  s   r  c               @   s"   e  Z d  Z d Z d d   Z d S)
PlaceOrderzQThis class is being used to save the customer job request details in the databasec       .   E   O   s5	  t  d  t  d  y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  } | 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|	 sHt d! d" d# d& i  S|
 sd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| sDt d! d" d# d/ i  S| s`t d! d" d# d0 i  S| s|t d! d" d# d1 i  S| ryX t  |  d2 t _ t j j d3 t t	 |  d4  d5 d6 d7 d8 d9 |  } t  |  Wn2 t
 k
 r}  z t  d: |   WYd  d  }  ~  Xn Xd; }! t  d<  t j j d= |  j   }" t  d>  |" rt  d?  |" j }# t j j d@ |#  j   }$ t  dA  |$ rt  dB  t j j dC |  j   }% |% rt  dD  t j j d
 | d |	 d |
 d | d | d | dE | d | d | d | dF | dG |! d | d | d | d | dH |$ d |% d |  }& | rr| |& _ | |& _ | |& _ | |& _ |& j   yi t j j dI |& j dJ dK dL dM dN dO dP dQ  t j j dR |" j dI |& j dS dK dL dM dN dT dP dQ  Wn/ t
 k
 r}  z t  |   WYd  d  }  ~  Xn Xy t |$ j dH dU dV dW  Wn/ t
 k
 r[}  z t  |   WYd  d  }  ~  Xn X| rdX | }' t  dY  | |' dZ |& j t  d[  y | dZ |& j  t  d[  Wn/ t
 k
 r}  z t  |   WYd  d  }  ~  Xn Xt d! d\ d# d] d^ |& j i  Sn t d! d" d# d$ i  St d! d_ d# d` i  St j j da db  j   }( |( rR| snt d! d" d# d$ i  St j j   }" t j j da t  j   }( |( rt j j dR |( dc dK  j   }$ |$ rt j j dd de df t   j!   }) |) r|) j" }* |) j# }+ t  |*  t  |+  t$ t% j&  }, t' j' j( t) j* |,   }- t  |-  |- |* k r|- |+ k  rdK |) _+ |) j   t d! d\ d# dg i  St d! dh d# di i  Sqt d! dh d# dj i  Sqt d! dh d# dk i  Sn t d! dl d# d$ i  SWnE t
 k
 r0	}  z% t  |   t d! d_ d# d` i  SWYd  d  }  ~  Xn Xd  S)mNz

zPlaceOrder API - 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   r   r   c             S   s)   g  |  ] } t  j t j t j   q Sr   )r   r   r   r   r   )r   r   r   r   r   r      s   	 z;PlaceOrder.post.<locals>.generateqrcode.<locals>.<listcomp>r!   z/media/CustomerJobs/r#   zAWB-z/qrcode.pngr$   r%   r&   )r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r   r1   r   r2   r3   r   r6   r7   r8   )	r:   r(   r)   r*   r;   r<   r=   r>   r?   r   r   r   rA     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   rB   rC   )r   r   r   c                s)   g  |  ] }   j   j  j   q Sr   )r   r   r   )r   r   )r   r   r   r   r      s   	 z>PlaceOrder.post.<locals>.getI420FromBase64.<locals>.<listcomp>r!   z/media/CustomerJobs/c                s%   g  |  ] }  j  j   |   q Sr   )r2   r.   )r   rD   )r=   r*   r   r   r      s   	 i  zparcelimage.r&   )r'   rE   r0   rF   rG   r   rH   r   r   r   r*   rI   r+   r,   r-   r.   r/   rJ   rK   r   r1   r   r2   r3   rL   rM   r   rN   rO   r8   rP   )rQ   r:   rR   rS   rT   rU   rV   rW   rX   r   rY   r;   r<   rZ   r[   rD   r\   r?   r   )r=   r*   r   r   r   r]     s6    


$+ %	
z*PlaceOrder.post.<locals>.getI420FromBase64r^   r   rh   ri   rj   rk   rl   rv   rw   r`   rm   rn   ro   rp   rq   rr   rs   rt   ru   r   rx   ry   rz   r{   r|   r   i  r   zUser not logged in.z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 requiredr   r   r   r   r   r   zParcel Paymentr   zException in creating charge = rC   ra   rb   r&   rc   rd   re   rf   r}   r~   r   r   r   r   r   r   Tr   zParcel Job Createdr   z"You have created one parcel order.r   r   r   r   z&Customer has created one parcel order.r   r   z*Your parcel details are saved successfullyzdata:image/png;base64,zbefore function callr:   zafter function callr   zSuccess.r   i  zInternal Server Errorr   zraheja@yopmail.comr   r   r   r   zUser registered successfully.r   zOTP has expired 1zInvalid OTPzCustomer exists.i  ),r'   r   r-   r   r   r   r   r6   r   r   r9   r   r,   r   r   r   r   r   r+   rv   rw   rx   ry   r8   r   r   r   r   r   r   r   r   r   r   r   r   r0   r   r   r   r   r   r   r   ).r   r   r   r   rA   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@   r   r   r   r   r   r;   rQ   r   r   r   r   r   r   r   r   r   r     s   

!
		 


	


				
.;


"!!		


	

zPlaceOrder.postN)r   r   r   r   r   r   r   r   r   r    s   r  c               @   s"   e  Z d  Z e d d    Z d S)	SignUpOTPc             O   sy  t  d  yt  d | j  | j j d  } | sK t d d d d i  S| j j d  } | sy 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  }	 |	 sGt d d d d i  St  |  t  |  t j j d |  j   }
 |
 rt d d d d i  St j j d | d | d |  }
 t	 j j d |
 d d  } | rt d d d d i  St	 j j
 d |
 d
 | d | d |	  } | rd } d } x5 t d  D]' } | | t j t j   d  7} q0Wt  d |  t j j   } t j j   t d d  } t  d   d! } t j j
 d" | d# | d$ | d% | d& |  } t  d'  t d d( d d) i  St d d d d* i  St  d+  t d, d( d d( i  SWnK t k
 rt} z+ t  |  t d d d t |  i  SWYd  d  } ~ Xn Xd  S)-Nz



zdata is  : r}   r   r   r   zName is requiredrZ  zEmail Address is requiredrJ  zcountrycode is requiredry  rE  zPhone number is requiredr  zPassword is requiredrn  zAddress is requiredr   zUser exists.r   r   TzCustomer exists.r  r   r  r  zOTP of 5 digits:r     r&   r   Zcontent_objectr   r   r   r   rc   r   zOTP sent on phone.zRegisteration not successfull.re   r   )r'   r   r-   r   r   r,   r   r   rg  r   r6   r/   r  r  r   r   r   r
   r   r9   r0   )r   r   r   r   rh  r   ri  rj  r`  r  r   r   r   r   r  r  r  r   r   r@   r   r   r   r     sh    



!'%
-


zSignUpOTP.postN)r   r   r   r   r   r   r   r   r   r    s   r  c               @   s"   e  Z d  Z e d d    Z d S)SignUpc             O   sw  t  d  t  d | j  y| j j d  } | sK t d d d d i  S| j j d  } | sy t d d d d	 i  S| j j d
  } | s t d d d d i  St j j d |  j   } | rt j j d | d d  j   } | rt	 j j d d d |  j
   }	 |	 r|	 j }
 |	 j } t  |
  t  |  t t j  } t j j t j |   } t  |  | |
 k r| | k  rd |	 _ |	 j   t d d d d i  St d d d d i  Sqt d d d d i  Sqt d d d d i  Sn t d d d d i  SWn] t k
 rr} z= t  |  t d d d t |  d d d t |  i  SWYd  d  } ~ Xn Xd  S)Nz



zdata is  : rZ  r   r   r   zEmail Address is requiredr   zOTP is requiredr   zfcmtoken is requiredr   r   r   Fr   r   Tr   zUser registered successfully.zOTP has expired 1zInvalid OTPzCustomer exists.zOTP has expiredr   r   )r'   r   r-   r   r   r,   r   r   r   r   r   r   r   r0   r   r   r   r   r   r   r   r8   r9   )r   r   r   r   r   r   ra  r   r   r   r   r   r   r   r@   r   r   r   r   		  sH    
!!		


	

zSignUp.postN)r   r   r   r   r   r   r   r   r   r  	  s   r  )FZdjango.shortcutsr   Zrest_framework.viewsr   django.httpr   django.views.decorators.csrfr   django.contrib.auth.modelsr   django.contrib.authr   Zrest_framework.authtoken.modelsr   Customer.modelsDriver.modelsZAdminApp.modelsr  r   r   r   r   r
   django.confr   django.core.mailr   rF   r  r   rH   r   r'  r   ZCustomer.commonfunctionsr   r   r   Zpyfcmr   django.contrib.auth.hashersr   r   sysr   r   r   r   r  r	  r  r  r  r5  r7  rO  rP  rQ  rW  rY  rb  rm  ro  r  r  r  r  r  r  r  r   r   r   r   <module>   sd   


< =+%!VfNH4d.M4T8dG