
W^4                @   s  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
 m Z d  d l m Z d d l m Z d  d	 l m Z d  d
 l Td  d l m Z d  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$ m% Z% m& Z& d  d l' m( Z( d  d l) m* Z* 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. Gd d   d e(  Z/ Gd  d!   d! e(  Z0 Gd" d#   d# e(  Z1 d$ d%   Z2 d& d'   Z3 d( d)   Z4 d* d+   Z5 d, d-   Z6 d. d/   Z7 d0 d1   Z8 e e d d Gd2 d3   d3 e   Z9 e e d d Gd4 d5   d5 e   Z: d6 d7   Z; e e d d Gd8 d9   d9 e   Z< e e d d Gd: d;   d; e   Z= d< d=   Z> d> d?   Z? d@ dA   Z@ dB dC   ZA dD dE   ZB dF dG   ZC dH dI   ZD dJ dK   ZE dL dM   ZF dN dO   ZG dP dQ   ZH dR dS   ZI dT dU   ZJ dV dW   ZK dX dY   ZL dZ d[   ZM d\ d]   ZN d^ d_   ZO d` da   ZP db dc   ZQ dd de   ZR df dg   ZS dh di   ZT dj dk   ZU dl dm   ZV dn do   ZW dp dq   ZX e e d d Gdr ds   ds e   ZY e e d d Gdt du   du e   ZZ e e d d Gdv dw   dw e   Z[ e e d d Gdx dy   dy e   Z\ e e d d Gdz d{   d{ e   Z] 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` e e d d Gd d   d e   Za Gd d   d e  Zb d S)    )render)TemplateView)HttpResponseJsonResponseHttpResponseRedirect)authenticate)User)Token   )checkloginadmin)method_decorator)*)sendfcmnotificationN)BytesIO)Image)settings)reverse)webpushWebPushException)APIView)	Paginatorc                   s4   e  Z d  Z d Z   f d d   Z d d   Z   S)AdminProfilezadmin_profile.htmlc          	      s  t  t |   j |   } t d  |  j j j d  r[ |  j j d } t |  j j d  t j j	 d |  j
   } t d  | rt d  t |  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AdminProfile - in get email01user2namephoneidyesprofile_section)superr   get_context_dataprintrequestsessionhas_keyr   objectsfilterfirstAdminprefetch_relatedappendr   r   r   r   )selfkwargscontext	email_valuser_obj	admin_obj
admin_data)	__class__ I/home/development/Documents/Good_Delivery/GoodsDelivery/AdminApp/views.pyr#      s,    



$
			

zAdminProfile.get_context_datac       
      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  S| d k s9| d k rt 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AdminProfile - in post r   userroleZadminidr   r   status_codei  status_messagezAdmin Id is requiredzName is requiredzEmail Address is requiredzPhone is requiredadmin
superadminr      zProfile updated successfullyz%You are not allowed to change detailsi  zInternal server error.N)r$   r%   r&   r'   POSTgetr   r+   r(   r)   r*   r   r   r   save	Exception)
r.   r%   r0   r1   userrole_valZadminid_valname_val	phone_valr3   er6   r6   r7   post6   s>    
			

zAdminProfile.post)__name__
__module____qualname__template_namer#   rF   r6   r6   )r5   r7   r      s   r   r   dispatchc                   s(   e  Z d  Z d Z   f d d   Z   S)AdminShowCustomerJobzadmin_showcustomerjob.htmlc          -      s\  t  t |   j |   } t d  i  } | d } t j j d |  j   } | rX| j se 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   } | re| 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)$zEThis class shows the content on show all drivers screen to Admin userzAdminShowCustomerJob-in get customerjobidr    z/static/images/camera.pngFcustomerjob
drivernamedrivercountrycodedriverphonedriveriddriverjobidT
sendernamesenderemailsenderphone
sendercitysenderpickupaddressrecipientnamerecipientphonerecipientdropoffaddressweightheightwidthimagevehicletypepriceparcelimageparcelpdf_linkqrcode	awbnumberzAWB-i'  driverexistdriverdetails)%r"   rL   r#   r$   CustomerJobr(   r)   r*   sendercountrycoderecipientcountrycodere   strr   MEDIA_BASE_URLr   r`   	DriverJobupdatedrivercountrycoder   r   rU   customerr   r   rW   rX   pickupaddressrZ   r[   dropoffaddressr]   r^   r_   ra   rb   )r.   r/   r0   datarM   customerjob_objrj   rk   re   rc   rg   driverjob_datadriverjob_obj)r5   r6   r7   r#   `   sn    

																							
z%AdminShowCustomerJob.get_context_data)rG   rH   rI   rJ   r#   r6   r6   )r5   r7   rL   \   s   rL   c                   s(   e  Z d  Z d Z   f d d   Z   S)AdminDriverAllCustomerJobsz!admin_driver_allcustomerjobs.htmlc       	         sQ  t  t |   j |   } t d  g  } | d } t j j d |  j   } | rMt j j d | d d  } x | D] } | j	 s | j
 r | j
 r d } q | j	 r d } n d	 } | d k s | d	 k ru | j d
 | j j d | j j d | j j d | j j d | j j d | j j d | j j d | d | j i	  qu W| | d <| S)zEThis class shows the content on show all drivers screen to Admin userz"AdminDriverAllCustomerJobs-in get rS   r   rp   jobcompletedF	Completedz	Picked UpAssignedrU   rV   rW   rY   rZ   r\   rM   statusall_driverjobs)r"   ry   r#   r$   DriverModelr(   r)   r*   rn   
jobstartedrz   r-   rO   rU   rV   rW   rs   rZ   rt   r   )	r.   r/   r0   ru   rS   
driver_objdriverjobs_obj	driverjobr}   )r5   r6   r7   r#      s6    

				
z+AdminDriverAllCustomerJobs.get_context_data)rG   rH   rI   rJ   r#   r6   r6   )r5   r7   ry      s   ry   c                   s(   e  Z d  Z d Z   f d d   Z   S)AdminNotificationszadmin_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 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 <t j j	 d d  j d
 d  | S)z<This function shows the content on customer dashboard screenzAdminNotifications - in get r   foradminTz-idr   	fordrivernotificationtypenotificationtextr}   datedeletedall_notificationsread)r"   r   r#   r$   r%   r&   r'   r   r(   r)   r*   Notificationsorder_byr-   r   r   r   r   r}   r   r   ro   )r.   r/   r0   r1   r2   notifications_datar   notification)r5   r6   r7   r#      s*    
						
z#AdminNotifications.get_context_data)rG   rH   rI   rJ   r#   r6   r6   )r5   r7   r      s   r   c               @   s   e  Z d  Z d d   Z d S)ReadNotificationc             O   s   t  d  t  d  t  d | j  yu | j j d  } | sU t d d d d i  St |  } t j j d	 |  j d
 d  } t d d d d i  SWnA t	 k
 r } z! t d d d t
 |  i  SWYd  d  } ~ Xn Xd  S)Nz



zReadNotification API - in post zdata is  : notificationidcoder   messageznotificationid is requiredr   r}   r   r=   znotification read)r$   r>   r?   r   intr   r(   r)   ro   rA   rl   )r.   r%   argsr/   notificationid_valZnotification_objrE   r6   r6   r7   rF      s    

!zReadNotification.postN)rG   rH   rI   rF   r6   r6   r6   r7   r      s   r   c               @   s   e  Z d  Z d d   Z d S)DeleteNotificationc             O   s   t  d  t  d  t  d | j  | j j d  } t  d |  | s_ t d d d d	 i  Sy9 t j j d
 |  j d d  t d d d d i  SWnA t k
 r } z! t d d d t	 |  i  SWYd  d  } ~ Xn Xd  S)Nz

z DeleteNotification API - in postzdata is  : r   znotificationid_val = r   r   r   znotification id is requiredr   r   Tr=   znotification deleted)
r$   r>   r?   r   r   r(   r)   ro   rA   rl   )r.   r%   r   r/   r   rE   r6   r6   r7   rF     s    

zDeleteNotification.postN)rG   rH   rI   rF   r6   r6   r6   r7   r     s   r   c               @   s(   e  Z d  Z d d   Z d d   Z d S)SavePusherDetailc       
      O   s   t  d  yz t  d  | j } t  d  d } t  d  d } d } t j j d |  } | rd n t j j d	 | d | d
 |  Wn9 t k
 r }	 z t  d  t  |	  WYd  d  }	 ~	 Xn Xt d  S)NzSavePusherDetail-in post r   r   ZO8yKafdGPtujC6a5K0L_Mw3zWBHJXGA2u6Sx5uHJAk1LPjmsiQdZQJR6-Ru7s8HuNHpECwKHw9mwKItYRerCUhvY9uojJ26KUghe5SiXEYLe19VQzhttps://fcm.googleapis.com/fcm/send/cUqSQVM5MvU:APA91bGbvMALH4BO6OJoNqUui-G7vsmIunRkGUvaj0pkE_kM19v0oooDIRzQAqw8vCiSGdx1sdfjjV_D3i8NHHBHPhBZh3hyXLvIhAMHfctfN21SbtfiAjLTSOwb1vK9OZ8zH8dwmzyqauth_keyendpoint
p256dh_key)r$   ru   Pushersr(   r)   createrA   r   )
r.   r%   r   r/   Z	json_dataauthp256dhr   
pusher_objrE   r6   r6   r7   rF     s"    

	

#
zSavePusherDetail.postc             C   s-  |  j  j j d  r% |  j  j d } d } t j j d |  } | r#t j j d | d  } d d d d d	 g } t |  t | d  | r#y_ t d
 d | d j	 d d | d j
 d | d j i i d t j |  d d d d d i  Wn/ t k
 r"} z t |  WYd  d  } ~ Xn Xt d  S)Nr   zvaris_raheja@esferasoft.comr   r   zThis Is Just For Testing 1zThis Is Just For Testing2zThis Is Just For Testing 3zThis Is Just For Testing 4zThis Is Just For Testing 5Zsubscription_infor   keysr   r   ru   Zvapid_private_keyZ+f5YsZV4K49BiMvOMVh1obJpk4oNXIw2oVXCbfbjsnm0Zvapid_claimssubzmailto:varisraheja@gmail.comZgettt)r%   r&   r'   MainUserr(   r)   r   r$   r   r   r   r   randomchoicer   r   )r.   r%   emailidmain_user_objr   	data_listexr6   r6   r7   r?   /  s,    
zSavePusherDetail.getN)rG   rH   rI   rF   r?   r6   r6   r6   r7   r     s   r   c             O   sR   y t  |  d  } Wn/ t k
 rD } z t |  WYd  d  } ~ Xn Xd | _ | S)Nz404.htmli  )r   rA   r$   r9   )r%   r   argvresponserr6   r6   r7   
handler404O  s    	r   c             C   sR   y t  |  d  } Wn/ t k
 rD } z t |  WYd  d  } ~ Xn Xd | _ | S)Nz500.htmli  )r   rA   r$   r9   )r%   r   r   r6   r6   r7   
handler500W  s    	r   c       	      O   sY  t  d  yt  |  j  |  j j d  } |  j j d  } |  j j d  } | d k r t j j d |  j   } | r| d k r d | _ n | d k r d	 | _ | j   t	 d
  SnW | d k rt
 j j d |  j   } | r| | _ | j   t	 d
  Sn
 t	 d  SWn9 t k
 rT} z t  |  t	 d  SWYd d } ~ Xn Xd S)zDThis function is being used to edit the parcel type details by Adminz'Admin - in changedisablestatus functionr8   r   disablerr   trueTfalseFr   rp   r   r   N)r$   r>   r?   Customerr(   r)   r*   
isdisabledr@   r   r   Z	isdisablerA   )	r%   r   r/   r8   id_valr   customer_objr   rE   r6   r6   r7   changedisablestatusa  s2    
	
	

r   c             O   s   t  d  y |  j j d  } t j j d |  j   } | r~ g  } | j d | j d | j	 i  t
 t j |  d d St d  SWn9 t k
 r } z t  |  t d  SWYd	 d	 } ~ Xn Xd	 S)
zDThis function is being used to edit the parcel type details by Adminz#Admin - in edit_parceltype functionparceltype_idr   
parceltypesafeFr   r   N)r$   r>   r?   
ParcelTyper(   r)   r*   r-   r   r   r   jsondumpsr   rA   )r%   r   r/   r   parceltype_objZparceltype_datarE   r6   r6   r7   edit_parceltype  s    
	
r   c             O   s   t  d  y |  j j d  } | s; t d d d d i  St j j d |  j   } | rr t d d d d i  St j j d |  } t d d d d	 i  SWnK t	 k
 r } z+ t  |  t d d d t
 |  i  SWYd
 d
 } ~ Xn Xd
 S)zCThis function is being used to add the parcel type details by Adminz"Admin - in add_parceltype functionr   r9   r   r:   zParcelType is required.zparcelType exists.r=   zRecord added successfully.N)r$   r>   r?   r   r   r(   r)   r*   r   rA   rl   )r%   r   r/   r   r   rE   r6   r6   r7   add_parceltype  s    

r   c             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  St j j d	 |  j   } | r | | _ | j	   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)zFThis function is being used to update the parcel type details by Adminz%Admin - in update_parceltype functionr   r9   r   r:   zparcelType Id is required.r   zParcelType is required.r   r=   zRecord updated successfully.zParcelType record not found.N)r$   r>   r?   r   r   r(   r)   r*   r   r@   rA   rl   )r%   r   r/   r   r   r   rE   r6   r6   r7   update_parceltype  s"    
	

r   c             O   s   t  d  y |  j j d  } | s; t d d d d i  St j j d |  j   } | r d | _ | j	   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)zFThis function is being used to delete the parcel type details by Adminz%Admin - in delete_parceltype functionr   r9   r   r:   zParceltype Id is required.r   Tr=   zRecord deleted successfully.zParcelType record not found.N)r$   r>   r?   r   r   r(   r)   r*   	isdeletedr@   rA   rl   )r%   r   r/   r   r   rE   r6   r6   r7   delete_parceltype  s    
	

r   c                   s(   e  Z d  Z d Z   f d d   Z   S)AllParcelTypeszadmin_showallparceltypes.htmlc                s   t  t |   j |   } t d  t j j d d  } g  } | rs x- | D]% } | j d | j d | j	 i  qJ W| | d <| S)zJThis class shows the content on show all parcel types screen to Admin userzAllparcelTypes-in get r   Fr   r   all_parceltypes)
r"   r   r#   r$   r   r(   r)   r-   r   r   )r.   r/   r0   r   ru   r   )r5   r6   r7   r#     s    
	
zAllParcelTypes.get_context_data)rG   rH   rI   rJ   r#   r6   r6   )r5   r7   r     s   r   c                   s(   e  Z d  Z d Z   f d d   Z   S)Supportzadmin_support.htmlc                s   t  t |   j |   } t d  t j j d d  } g  } | rs x- | D]% } | j d | j d | j	 i  qJ W| | d <| S)zJThis class shows the content on show all parcel types screen to Admin userzSupport-in get r   Fr   r   Zsupportdetails)
r"   r   r#   r$   SupportDetailr(   r)   r-   r   r   )r.   r/   r0   supportdetail_objru   detail)r5   r6   r7   r#     s    
	
zSupport.get_context_data)rG   rH   rI   rJ   r#   r6   r6   )r5   r7   r     s   r   c       	   C   O   s  t  d  yXt  |  j  |  j j d  } |  j j d  } t j j d |  j   } t j j d |  j   } | ra| rat j j	 d | d |  } | rKy> t
 j j	 d | j j d | j d d	 d
 d d d d d  Wn/ t k
 r} z t  |  WYd  d  } ~ Xn Xy  t | j j d d d d  Wn/ t k
 rb} z t  |  WYd  d  } ~ Xn Xy> t
 j j	 d | j j d | j d d	 d
 d d d d d  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 Xd | _ | 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)"Nz Admin - in assigndriver functionrS   rM   r   rp   rO   r   forcustomerTr   zDriver Assignedr   z1Driver has been assigned for your parcel request.r}   unreadrr   statuschangeKwickDeliveryz0Driver has been assigned for your parcel requestuser_idr   zParcel Pickup RequestzYou have one pickup request.zYou have one pickup requestr
   r9   r=   r:   z Driver is assigned for this job.i  zBad request.i  zInternal Server Error.)r$   r>   r?   r   r(   r)   r*   ri   rn   r   r   rr   r   r   rA   r   fcmtokenr}   r@   r   )	r%   r   r/   	driver_idcustomerjob_idr   rv   rx   rE   r6   r6   r7   assign_driver  sB    
> >	

r   c                   s(   e  Z d  Z d Z   f d d   Z   S)!AdminShowAllCustomerJobsCompletedzadmin_showallcustomerjobs.htmlc                s  t  t |   j |   } t d  t j j d d  j d  } | r g  } x | D] } | j d k rq d } n- | j d k r d } n | j d	 k r d } | j	 d
 | j
 d | j d | j d | j d | j d | j d | j i  qS W| | d <t j j   | d <| S)zKThis class shows the content on show all customer jobs screen to Admin userz&AdminShowAllCustomerJobsCompleted get r   Fz-idr   zSame Day Deliveryr
   zTwo Day Delivery   rU   rV   rW   rY   rZ   r\   r   all_customerjobsall_drivers)r"   r   r#   r$   ri   r(   r)   r   deliverydurationr-   rU   rV   rW   rs   rZ   rt   r   r   all)r.   r/   r0   r   all_customerjobs_datarO   r   )r5   r6   r7   r#   ,  s.    
									
z2AdminShowAllCustomerJobsCompleted.get_context_data)rG   rH   rI   rJ   r#   r6   r6   )r5   r7   r   (  s   r   c                   s(   e  Z d  Z d Z   f d d   Z   S)AdminShowAllCustomerJobszadmin_showallcustomerjobs.htmlc                s  t  t |   j |   } t d  t j j d d  j d  } | r g  } x | D] } | j d k rq d } n- | j d k r d } n | j d	 k r d } | j	 d
 | j
 d | j d | j d | j d | j d | j d | j i  qS W| | d <t j j   | d <| S)zKThis class shows the content on show all customer jobs screen to Admin userz3AdminShowAllCustomers-AdminShowAllCustomerJobs get r   Fz-idr   zSame Day Deliveryr
   zTwo Day Deliveryr   rU   rV   rW   rY   rZ   r\   r   r   r   )r"   r   r#   r$   ri   r(   r)   r   r   r-   rU   rV   rW   rs   rZ   rt   r   r   r   )r.   r/   r0   r   r   rO   r   )r5   r6   r7   r#   Z  s.    
									
z)AdminShowAllCustomerJobs.get_context_data)rG   rH   rI   rJ   r#   r6   r6   )r5   r7   r   V  s   r   c             O   s  t  d  yd d l m } i  } |  j j d  rF |  j d | d <|  j j d  r |  j d } t j j d |  j   } | r | j	 d | j
 | d <t j j d d	 d
 d	  j   } t j j d d	 d
 d	  j   } t j j d d	 d
 d	  j   }	 | | d <| | d <|	 | d <t j j   j d  d  d  d  d  d(  }
 |
 | d <t  d  |  j j d  rt  d  |  j d } | d k rt  d  t t d   S| |  d |  S| d k rt  d  t t d   S| |  d |  S| d k rt  d  t t d   S| d k rCt  d   t t d!   S| d" k rit  d#  t t d$   St  d%  t t d&   Sn  t t d&   S| |  d' |  SWnO t k
 r} z/ t  |  t t d&   S| |  d' |  SWYd  d  } ~ Xn Xd  S))NzAdmin - in dashboard functionr   )r   r8   r   username accountapprovedTr   totalcustomerstotalcompaniestotaldriversz-id   r
   recent_companiesz


r   r<   r   zsuperadmin-dashboardzsuperadmin_dashboard.htmlr;   r   zadmin-dashboardzadmin_dashboard.htmlrr   r   zcustomer-dashboardcompany4zcompany-dashboardrp   5zdriver-dashboard6zcustomer-loginzadmin_login.html)r$   django.shortcutsr   r&   r'   r   r(   r)   r*   
first_name	last_namer   countCompanyr   r   r   r   r   rA   )r%   r   r/   r   r0   r1   r2   r   r   r   r   r8   rE   r6   r6   r7   	dashboard  s`    
!!!


/









r   c             O   s   t  d  y |  j j d  } t j j d |  j   } | r g  } | j d | j d | j	 d | j
 d | j d | j d	 | j d
 | j d | j i  t t j |  d d St d  SWn9 t k
 r } z t  |  t d  SWYd d } ~ Xn Xd S)zEThis function is being used to edit the vehicle type details by Adminz$Admin - in edit_vehicletype functionvehicletype_idr   r   carryinglimitinkgfixeddistancedistanceunitbaserateaddittionalrateperunitcurrencyr   Fr   r   N)r$   r>   r?   VehicleTyper(   r)   r*   r-   r   r   r   r   r   r   r   r   r   r   r   r   rA   )r%   r   r/   r   vehicletype_objZvehicletype_datarE   r6   r6   r7   edit_vehicletype  s(    
							
r   c             O   s.  t  d  y|  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  St j j d | d d  j   }
 |
 rt d	 d
 d d i  St j j d | d | d | d | d | d | d |	  }
 t d	 d d d i  SWnK t	 k
 r)} z+ t  |  t d	 d
 d t
 |  i  SWYd d } ~ Xn Xd S)zDThis function is being used to add the vehicle type details by Adminz#Admin - in add_vehicletype functionr   r   r   r   r   r   r   r9   r   r:   zVehicleType Name is required.zcarryinglimitinkg is required.zfixeddistance is required.zdistanceunit is required.zbaserate is required.z#addittionalrateperunit is required.zcurrency is required.r   FzVehicleType exists.r=   zRecord added successfully.N)r$   r>   r?   r   r   r(   r)   r*   r   rA   rl   )r%   r   r/   r   r   r   r   r   r   r   r   rE   r6   r6   r7   add_vehicletype  s>    
!9
r   c             O   s   t  d  y |  j j d  } | s; t d d d d i  St j j d |  j   } | r d | _ | j	   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)zGThis function is being used to delete the vehicle type details by Adminz&Admin - in delete_vehicletype functionr   r9   r   r:   zvehicletype Id is required.r   Tr=   zRecord deleted successfully.zVehicleType record not found.N)r$   r>   r?   r   r   r(   r)   r*   r   r@   rA   rl   )r%   r   r/   r   r   rE   r6   r6   r7   delete_vehicletype  s    
	

r   c             O   sf  t  d  y
|  j j d  } | s; t d d d d i  S|  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| sEt d d d d i  S|	 sa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  SWnK t k
 ra} z+ t  |  t d d d t |  i  SWYd d } ~ Xn Xd S)zGThis function is being used to update the vehicle type details by Adminz&Admin - in update_vehicletype functionr   r9   r   r:   zVehicleType Id is required.r   r   r   r   r   r   r   zVehicleType Name is required.zcarryinglimitinkg is required.zfixeddistance is required.zdistanceunit is required.zbaserate is required.z#addittionalrateperunit is required.zcurrency is required.r   r=   zRecord updated successfully.zVehicleType record not found.N)r$   r>   r?   r   r   r(   r)   r*   r   r   r   r   r   r   r   r@   rA   rl   )r%   r   r/   r   r   r   r   r   r   r   r   r   rE   r6   r6   r7   update_vehicletype  sR    
							

r   c             O   s  t  d  y |  j j d  } t j j d |  j   } | r g  } | j r^ | j j } n d } | j	 d | j
 j d | j
 j d | j d | j d	 | j
 j d
 | d | j i  t t j |  d d St d  SWn9 t k
 r} z t  |  t d  SWYd d } ~ Xn Xd S)z6This function is being used to edit the driver detailszAdmin - in edit_driver functionr   r   rN   	firstnamelastnamerq   r   r   r`   r   Fr   r   N)r$   r>   r?   r   r(   r)   r*   r`   r   r-   r   r   r   rq   r   r   r   r   r   r   r   rA   )r%   r   r/   r   r   driver_datar`   rE   r6   r6   r7   edit_driver?  s,    
			
r   c             O   sq  t  d  yd d d  } |  j j d  } | sJ t d d d d	 i  S|  j j d
  } | sx 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  }	 |	 s0t d d d d i  S|  j j d  }
 t j j d |  j   } | ryt d d d d i  St j j d | d | d | d | d |  } t	 j j
 d | d | d |	 d d  } | r|
 r|
 } | | d | j t d d d d i  St d d d d i  SWnK t k
 rl} z+ t  |  t d d d t |  i  SWYd  d  } ~ Xn Xd  S)!z>This function is being used to add the driver details by AdminzAdmin - in add_driver functionzc:\c                s]  |  j  d  } | d } | j  d  } t | d  } | d } t j |  } t |  } t j |  }	 t j j	 d |  }
 d j
 d d   t d	  D  } t j j   } t t j  d
 t |
 j  d t |
 j j    t j j    r;  f d d   t j    D } x+ | D] } t j |  q!Wn t j    x | D] } t j |  }	 |	 j t | j  t | j  g t j  } |	 j   d t | j  d t | j  d | d |  } qOWt j |  }	 |	 j   d | d |  t t j  d
 t |
 j  d t |
 j j  d | d | } | |
 _  |
 j   d S)Nz;base64,r   /r
   r   rN   c             S   s)   g  |  ] } t  j t j t j   q Sr6   )r   r   stringascii_lettersdigits).0nr6   r6   r7   
<listcomp>k  s   	 z9add_driver.<locals>.getI420FromBase64.<locals>.<listcomp>   z/media/Users/Drivers/_c                s%   g  |  ] } t  j j   |   q Sr6   )ospathjoin)r  f)filepathr6   r7   r  o  s   	 r   -.z
/original-r   )!splitrl   base64	b64decoder   r   openr   r(   r?   r  rangeThumbnailSizer   r   BASE_DIRr   r   r   r	  r
  existslistdirremovemkdir	thumbnailr   r^   r_   	ANTIALIASr@   WEB_BASE_URLr`   )codecr   
image_pathbase64_dataextensext	extension	byte_data
image_dataimgr   stthumbnailsize_objsfilesToRemover  objimfilenamer6   )r  r7   getI420FromBase64`  s6    

"4"-ED	
z%add_driver.<locals>.getI420FromBase64r   r9   r   r:   zFirst Name is required.r   zLast Name is required.r   zEmail Address is required.passwordzPassword is required.rq   zCountry Code is required.r   zPhone Number is required.r`   r   zUser exists.r   r   r   r   Tr   r=   zRecord added successfully.zRecord not created.N)r$   r>   r?   r   r   r(   r)   r*   create_userr   r   r   rA   rl   )r%   r   r/   r-  r   r   r   r.  rq   r   imgsrcr2   r   r  rE   r6   r6   r7   
add_driver\  sH    
-'
r1  c             O   s   t  d  y |  j j d  } | s; t d d d d i  St j j d |  j   } | r d | _ | j	   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)zAThis function is being used to delete the driver details by Adminz!Admin - in delete_driver functionr   r9   r   r:   zdriver Id is required.r   Tr=   zRecord deleted successfully.zdriver record not found.N)r$   r>   r?   r   r   r(   r)   r*   r   r@   rA   rl   )r%   r   r/   r   r   rE   r6   r6   r7   delete_driver  s    
	

r2  c             O   s   t  d  y |  j j d  } | s; t d d d d i  St j j d |  j   } | r d | _ | j	   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)zBThis function is being used to approve the driver details by Adminz"Admin - in approve_driver functionr   r9   r   r:   zdriver Id is required.r   Tr=   zAccount approved successfully.zdriver record not found.N)r$   r>   r?   r   r   r(   r)   r*   r   r@   rA   rl   )r%   r   r/   r   r   rE   r6   r6   r7   approve_driver  s    
	

r3  c             O   s  t  d  yd d d  } |  j j d  } | sJ t d d d d	 i  S|  j j d
  } | sx 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  }	 t j j d |  j d  j   }
 |
 r| |
 j	 _
 | |
 j	 _ |
 j	 j   | |
 _ | |
 _ |
 j   |	 r|	 } | | d |
 j 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)zAThis function is being used to update the driver details by Adminz!Admin - in update_driver functionzc:\c                s]  |  j  d  } | d } | j  d  } t | d  } | d } t j |  } t |  } t j |  }	 t j j	 d |  }
 d j
 d d   t d	  D  } t j j   } t t j  d
 t |
 j  d t |
 j j    t j j    r;  f d d   t j    D } x+ | D] } t j |  q!Wn t j    x | D] } t j |  }	 |	 j t | j  t | j  g t j  } |	 j   d t | j  d t | j  d | d |  } qOWt j |  }	 |	 j   d | d |  t t j  d
 t |
 j  d t |
 j j  d | d | } | |
 _  |
 j   d S)Nz;base64,r   r   r
   r   rN   c             S   s)   g  |  ] } t  j t j t j   q Sr6   )r   r   r  r  r  )r  r  r6   r6   r7   r    s   	 z<update_driver.<locals>.getI420FromBase64.<locals>.<listcomp>r  z/media/Users/Drivers/r  c                s%   g  |  ] } t  j j   |   q Sr6   )r	  r
  r  )r  r  )r  r6   r7   r    s   	 r   r  r  z
/original-r   )!r  rl   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  r   r!  r"  r#  r$  r%  r&  r   r'  r(  r)  r  r*  r+  r,  r6   )r  r7   r-    s6    

"4"-ED	
z(update_driver.<locals>.getI420FromBase64r   r9   r   r:   zdriver Id is required.r   zFirst Name is required.r   zLast Name is required.rq   zCountry Code is required.r   zPhone Number is required.r`   r   r   r   r=   zRecord updated successfully.zdriver record not found.N)r$   r>   r?   r   r   r(   r)   r,   r*   r   r   r   r@   rq   r   r   rA   rl   )r%   r   r/   r-  r   r   r   rq   r   r0  r   r  rE   r6   r6   r7   update_driver  sF    
$		

r4  c             O   s'  t  d  y |  j d } t j j d |  j   } | r g  } | j rY | j j } n d } | j d | j	 j
 d | j	 j d | j d | j d	 | j d
 | j	 j d | j d | d | j i	  t t j |  d d St d  SWn9 t k
 r"} z t  |  t d  SWYd d } ~ Xn Xd S)z@This function is being used to edit the company details by Adminz Admin - in edit_company function
company_idr   rN   r   r   r   rq   r   r   addressr`   r   Fr   r   N)r$   r>   r   r(   r)   r*   r`   r
  r-   r   r   r   r   rq   r   r   r6  r   r   r   r   r   rA   )r%   r   r/   r5  company_objZcompany_datar`   rE   r6   r6   r7   edit_company  s0    
					
r8  c             O   sC  t  d  yd d d  } |  j j d  } | sJ t d d d d	 i  S|  j j d
  } | sx 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  }	 t j j d |  j   }
 |
 rKt d d d d i  St j j d | d
 | d |  }
 t	 j j
 d |
 d | d
 | d | d | d d  } | r|	 r|	 } | | d | j 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)z?This function is being used to add the company details by AdminzAdmin - in add_company functionzc:\c                s]  |  j  d  } | d } | j  d  } t | d  } | d } t j |  } t |  } t j |  }	 t j j	 d |  }
 d j
 d d   t d	  D  } t j j   } t t j  d
 t |
 j  d t |
 j j    t j j    r;  f d d   t j    D } x+ | D] } t j |  q!Wn t j    x | D] } t j |  }	 |	 j t | j  t | j  g t j  } |	 j   d t | j  d t | j  d | d |  } qOWt j |  }	 |	 j   d | d |  t t j  d
 t |
 j  d t |
 j j  d | d | } | |
 _  |
 j   d S)Nz;base64,r   r   r
   r   rN   c             S   s)   g  |  ] } t  j t j t j   q Sr6   )r   r   r  r  r  )r  r  r6   r6   r7   r  C  s   	 z:add_company.<locals>.getI420FromBase64.<locals>.<listcomp>r  z/media/Users/Companies/r  c                s%   g  |  ] } t  j j   |   q Sr6   )r	  r
  r  )r  r  )r  r6   r7   r  G  s   	 r   r  r  z
/original-r   )!r  rl   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  r   r!  r"  r#  r$  r%  r&  r7  r'  r(  r)  r  r*  r+  r,  r6   )r  r7   r-  8  s6    

"4"-ED	
z&add_company.<locals>.getI420FromBase64r   r9   r   r:   zCompany Name is required.r   zEmail Address is required.r.  zPassword is required.r   zPhone Number is required.r6  zAddress is required.r`   r   zUser exists.r   r   Tr   r=   zRecord added successfully.zRecord not created.N)r$   r>   r?   r   r   r(   r)   r*   r/  r   r   r   rA   rl   )r%   r   r/   r-  r   r   r.  r   r6  r0  r2   r7  r  rE   r6   r6   r7   add_company4  sB    
 !3
r9  c             O   s   t  d  y |  j d } | s6 t d d d d i  St j j d |  j   } | r d | _ | j   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)zBThis function is being used to delete the company details by Adminz"Admin - in delete_company functionr5  r9   r   r:   zcompany Id is required.r   Tr=   zRecord deleted successfully.zcompany record not found.N)r$   r>   r   r   r(   r)   r*   r   r@   rA   rl   )r%   r   r/   r5  r7  rE   r6   r6   r7   delete_company  s    
	

r:  c             O   s   t  d  y |  j d } | s6 t d d d d i  St j j d |  j   } | r d | _ | j   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)zCThis function is being used to approve the company details by Adminz#Admin - in approve_company functionr5  r9   r   r:   zCompany Id is required.r   Tr=   zAccount approved successfully.zCompany record not found.N)r$   r>   r   r   r(   r)   r*   r   r@   rA   rl   )r%   r   r/   r5  r7  rE   r6   r6   r7   approve_company  s    
	

r;  c             O   s  t  d  y&d d d  } |  j j d  } | sJ t d d d d	 i  S|  j j d
  } | sx 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  }	 |	 s0t d d d d i  S|  j j d  }
 |
 s^t d d d d i  S|  j j d  } t j j d |  j   } | r| | j _	 | | j _
 | j j   | | _ | | _ |	 | _ |
 | _ | j   | r| } | | d | j 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)zBThis function is being used to update the company details by Adminz"Admin - in update_company functionzc:\c                s]  |  j  d  } | d } | j  d  } t | d  } | d } t j |  } t |  } t j |  }	 t j j	 d |  }
 d j
 d d   t d	  D  } t j j   } t t j  d
 t |
 j  d t |
 j j    t j j    r;  f d d   t j    D } x+ | D] } t j |  q!Wn t j    x | D] } t j |  }	 |	 j t | j  t | j  g t j  } |	 j   d t | j  d t | j  d | d |  } qOWt j |  }	 |	 j   d | d |  t t j  d
 t |
 j  d t |
 j j  d | d | } | |
 _  |
 j   d S)Nz;base64,r   r   r
   r   rN   c             S   s)   g  |  ] } t  j t j t j   q Sr6   )r   r   r  r  r  )r  r  r6   r6   r7   r    s   	 z=update_company.<locals>.getI420FromBase64.<locals>.<listcomp>r  z/media/Users/Companies/r  c                s%   g  |  ] } t  j j   |   q Sr6   )r	  r
  r  )r  r  )r  r6   r7   r    s   	 r   r  r  z
/original-r   )!r  rl   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  r   r!  r"  r#  r$  r%  r&  r7  r'  r(  r)  r  r*  r+  r,  r6   )r  r7   r-    s6    

"4"-ED	
z)update_company.<locals>.getI420FromBase64r5  r9   r   r:   zCompany Id is required.r   zFirst Name is required.r   zLast Name is required.r   zCompany Name is required.rq   zCountry Code is required.r   zPhone Number is required.r6  zAddress is required.r`   r   r   r=   zRecord updated successfully.zcompany record not found.N)r$   r>   r?   r   r   r(   r)   r*   r   r   r   r@   r   rq   r   r6  r   rA   rl   )r%   r   r/   r-  r5  r   r   r   rq   r   r6  r0  r7  r  rE   r6   r6   r7   update_company  sV    
				

r<  c             O   s	  t  d  y |  j j d  } t j j d |  j   } | r g  } | j r^ | j j } n d } | j	 d | j d | j
 d | j d | d | j i  t  |  t t j |  d	 d
 St d  SWn9 t k
 r} z t  |  t d  SWYd d } ~ Xn Xd S)z>This function is being used to edit the admin details by AdminzAdmin - in edit_admin functionadmin_idr   rN   r   r   r   r`   r   Fr   r   N)r$   r>   r?   r+   r(   r)   r*   r`   r   r-   r   r   r   r   r   r   r   rA   )r%   r   r/   r=  r3   r4   r`   rE   r6   r6   r7   
edit_admin  s*    
				

r>  c             O   s  t  d  yd d d  } |  j j d  } | sJ t d d d d	 i  S|  j j d
  } | sx 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  } t j j d |  j   }	 |	 rt d d d d i  St j j d | d
 | d | d d d d  }	 t	 j j
 d |	 d | d
 | d | d d  }
 |
 r| r| } | | d |
 j 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)z=This function is being used to add the admin details by AdminzAdmin - in add_admin functionzc:\c                s]  |  j  d  } | d } | j  d  } t | d  } | d } t j |  } t |  } t j |  }	 t j j	 d |  }
 d j
 d d   t d	  D  } t j j   } t t j  d
 t |
 j  d t |
 j j    t j j    r;  f d d   t j    D } x+ | D] } t j |  q!Wn t j    x | D] } t j |  }	 |	 j t | j  t | j  g t j  } |	 j   d t | j  d t | j  d | d |  } qOWt j |  }	 |	 j   d | d |  t t j  d
 t |
 j  d t |
 j j  d | d | } | |
 _  |
 j   d S)Nz;base64,r   r   r
   r   rN   c             S   s)   g  |  ] } t  j t j t j   q Sr6   )r   r   r  r  r  )r  r  r6   r6   r7   r  #  s   	 z8add_admin.<locals>.getI420FromBase64.<locals>.<listcomp>r  z/media/Users/Admins/r  c                s%   g  |  ] } t  j j   |   q Sr6   )r	  r
  r  )r  r  )r  r6   r7   r  '  s   	 r   r  r  z
/original-r   )!r  rl   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  r   r!  r"  r#  r$  r%  r&  r3   r'  r(  r)  r  r*  r+  r,  r6   )r  r7   r-    s6    

"4"-ED	
z$add_admin.<locals>.getI420FromBase64r   r9   r   r:   zName is required.r   zEmail Address is required.r.  zPassword is required.r   zPhone Number is required.r`   r   zUser exists.is_staffTis_superuserFr   r   r   r=   zRecord added successfully.zRecord not created.N)r$   r>   r?   r   r   r(   r)   r*   r/  r+   r   r   rA   rl   )r%   r   r/   r-  r   r   r.  r   r0  r2   r3   r  rE   r6   r6   r7   	add_admin  s<    
--
rA  c             O   s%  t  d  y |  j j d  } | s; t d d d d i  St j j d |  j   } t j j d |  j   } | r | j j	 } t
 j j d |  j   t  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)z@This function is being used to delete the admin details by Adminz Admin - in delete_admin functionr=  r9   r   r:   zadmin Id is required.r   r   r=   zRecord deleted successfully.zadmin record not found.N)r$   r>   r?   r   r+   r(   r)   r*   r   r   r   deleterA   rl   )r%   r   r/   r=  r3   useridrE   r6   r6   r7   delete_adminV  s     


rD  c             O   s   t  d  y |  j j d  } | s; t d d d d i  St j j d |  j   } | r d | _ | j	   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)zAThis function is being used to approve the admin details by Adminz!Admin - in approve_admin functionr=  r9   r   r:   zadmin Id is required.r   Tr=   zAccount approved successfully.zadmin record not found.N)r$   r>   r?   r   r;   r(   r)   r*   r   r@   rA   rl   )r%   r   r/   r=  r3   rE   r6   r6   r7   approve_admin}  s    
	

rE  c             O   s  t  d  yKd d d  } |  j j d  } | sJ t d d d d	 i  S|  j j d
  } | sx t d d d d i  S|  j j d  } t  d  | s t d d d d i  S|  j j d  } t  d  t j j d |  j d  j   } t  d  | r>| | _	 | | _
 | j   | r(| }	 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)z@This function is being used to update the admin details by Adminz Admin - in update_admin functionzc:\c                sg  t  d  |  j d  } | d } | j d  } t | d  } | d } t j |  } t |  } t j |  }	 t j	 j
 d |  }
 d j d d	   t d
  D  } t j	 j   } t t j  d t |
 j  d t |
 j j    t j j    rE  f d d	   t j    D } x+ | D] } t j |  q+Wn t j    x | D] } t j |  }	 |	 j t | j  t | j  g t j  } |	 j   d t | j  d t | j  d | d |  } qYWt j |  }	 |	 j   d | d |  t t j   d t |
 j  d t |
 j j  d | d | } | |
 _! |
 j   d S)NZHEREz;base64,r   r   r
   r   rN   c             S   s)   g  |  ] } t  j t j t j   q Sr6   )r   r   r  r  r  )r  r  r6   r6   r7   r    s   	 z;update_admin.<locals>.getI420FromBase64.<locals>.<listcomp>r  z/media/Users/admins/r  c                s%   g  |  ] } t  j j   |   q Sr6   )r	  r
  r  )r  r  )r  r6   r7   r    s   	 r   r  r  z
/original-r   )"r$   r  rl   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  r   r!  r"  r#  r$  r%  r&  r3   r'  r(  r)  r  r*  r+  r,  r6   )r  r7   r-    s8    


"4"-ED	
z'update_admin.<locals>.getI420FromBase64r=  r9   r   r:   zadmin Id is required.r   zName is required.r   z 1256zPhone Number is required.r`   Z1262r   r   Z1300r=   zRecord updated successfully.zadmin record not found.N)r$   r>   r?   r   r+   r(   r)   r,   r*   r   r   r@   rA   rl   )r%   r   r/   r-  r=  r   r   r0  r3   r  rE   r6   r6   r7   update_admin  s8    


$
		

rF  c             O   s	  t  d  y |  j j d  } t j j d |  j   } | r g  } | j r^ | j j } n d } | j	 d | j d | j
 d | j d | d | j i  t  |  t t j |  d	 d
 St d  SWn9 t k
 r} z t  |  t d  SWYd d } ~ Xn Xd S)zAThis function is being used to edit the customer details by Adminz!Admin - in edit_customer functioncustomer_idr   rN   r   r   r   r`   r   Fr   r   N)r$   r>   r?   r   r(   r)   r*   r`   r   r-   r   r   r   r   r   r   r   rA   )r%   r   r/   rG  r   Zcustomer_datar`   rE   r6   r6   r7   edit_customer  s*    
				

rH  c             O   s  t  d  yd d d  } |  j j d  } | sJ t d d d d	 i  S|  j j d
  } | sx 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  } t j j d |  j   }	 |	 rt d d d d i  St j j d | d
 | d |  }	 t	 j j
 d |	 d | d
 | d | d d  }
 |
 r| r| } | | d |
 j 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)z@This function is being used to add the customer details by Adminz Admin - in add_customer functionzc:\c                s]  |  j  d  } | d } | j  d  } t | d  } | d } t j |  } t |  } t j |  }	 t j j	 d |  }
 d j
 d d   t d	  D  } t j j   } t t j  d
 t |
 j  d t |
 j j    t j j    r;  f d d   t j    D } x+ | D] } t j |  q!Wn t j    x | D] } t j |  }	 |	 j t | j  t | j  g t j  } |	 j   d t | j  d t | j  d | d |  } qOWt j |  }	 |	 j   d | d |  t t j  d
 t |
 j  d t |
 j j  d | d | } | |
 _  |
 j   d S)Nz;base64,r   r   r
   r   rN   c             S   s)   g  |  ] } t  j t j t j   q Sr6   )r   r   r  r  r  )r  r  r6   r6   r7   r    s   	 z;add_customer.<locals>.getI420FromBase64.<locals>.<listcomp>r  z/media/Users/Customers/r  c                s%   g  |  ] } t  j j   |   q Sr6   )r	  r
  r  )r  r  )r  r6   r7   r  	  s   	 r   r  r  z
/original-r   )!r  rl   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  r   r!  r"  r#  r$  r%  r&  r   r'  r(  r)  r  r*  r+  r,  r6   )r  r7   r-    s6    

"4"-ED	
z'add_customer.<locals>.getI420FromBase64r   r9   r   r:   zName is required.r   zEmail Address is required.r.  zPassword is required.r   zPhone Number is required.r`   r   zUser exists.r   r   Tr   r=   zRecord added successfully.zRecord not created.N)r$   r>   r?   r   r   r(   r)   r*   r/  r   r   r   rA   rl   )r%   r   r/   r-  r   r   r.  r   r0  r2   r   r  rE   r6   r6   r7   add_customer  s<    
!-
rI  c             O   s   t  d  yc |  j j d  } | s; t d d d d i  St j j d |  j   } t d d d d	 i  SWnK t k
 r } z+ t  |  t d d d t	 |  i  SWYd
 d
 } ~ Xn Xd
 S)zCThis function is being used to delete the customer details by Adminz%Admin - in deletecustomerjob functionr   r9   r   r:   zCustomerJob Id is required.r   r=   zRecord deleted successfully.N)
r$   r>   r?   r   ri   r(   r)   rB  rA   rl   )r%   r   r/   r   r   rE   r6   r6   r7   deletecustomerjob8  s    

rJ  c             O   s  t  d  y1|  j j d  } | s; t d d d d i  St j j d |  j   } | r$d | _ | j	   t  d	  | j
 rt  d
  yF t j j | j
 j  r t  d  t j | j
 j  n
 t  d  Wn9 t k
 r} z t  |  t  d  WYd d } ~ Xn Xt 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)zCThis function is being used to delete the customer details by Adminz#Admin - in delete_customer functionrG  r9   r   r:   zCustomer Id is required.r   Tr   r   r   r   r   Nr=   zRecord deleted successfully.zCustomer record not found.)r$   r>   r?   r   r   r(   r)   r*   r   r@   r`   r	  r
  r  r  rA   rl   )r%   r   r/   rG  r   rE   r6   r6   r7   delete_customerX  s2    
	

	



rK  c             O   s   t  d  y |  j j d  } | s; t d d d d i  St j j d |  j   } | r d | _ | j	   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)zDThis function is being used to approve the customer details by Adminz$Admin - in approve_customer functionrG  r9   r   r:   zCustomer Id is required.r   Tr=   zAccount approved successfully.zCustomer record not found.N)r$   r>   r?   r   r   r(   r)   r*   r   r@   rA   rl   )r%   r   r/   rG  r   rE   r6   r6   r7   approve_customerv  s    
	

rL  c             O   s  t  d  y@d d d  } |  j j d  } | sJ t d d d d	 i  S|  j j d
  } | sx t d d d d i  S|  j j d  } | s t d d d d i  S|  j j d  } t j j d |  j d  j   } | r3| | _	 | | _
 | j   | r| }	 | |	 d | j 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)zCThis function is being used to update the customer details by Adminz#Admin - in update_customer functionzc:\c                s]  |  j  d  } | d } | j  d  } t | d  } | d } t j |  } t |  } t j |  }	 t j j	 d |  }
 d j
 d d   t d	  D  } t j j   } t t j  d
 t |
 j  d t |
 j j    t j j    r;  f d d   t j    D } x+ | D] } t j |  q!Wn t j    x | D] } t j |  }	 |	 j t | j  t | j  g t j  } |	 j   d t | j  d t | j  d | d |  } qOWt j |  }	 |	 j   d | d |  t t j  d
 t |
 j  d t |
 j j  d | d | } | |
 _  |
 j   d S)Nz;base64,r   r   r
   r   rN   c             S   s)   g  |  ] } t  j t j t j   q Sr6   )r   r   r  r  r  )r  r  r6   r6   r7   r    s   	 z>update_customer.<locals>.getI420FromBase64.<locals>.<listcomp>r  z/media/Users/Customers/r  c                s%   g  |  ] } t  j j   |   q Sr6   )r	  r
  r  )r  r  )r  r6   r7   r    s   	 r   r  r  z
/original-r   )!r  rl   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  r   r!  r"  r#  r$  r%  r&  r   r'  r(  r)  r  r*  r+  r,  r6   )r  r7   r-    s6    

"4"-ED	
z*update_customer.<locals>.getI420FromBase64rG  r9   r   r:   zCustomer Id is required.r   zName is required.r   zPhone Number is required.r`   r   r   r   r=   zRecord updated successfully.zCustomer record not found.N)r$   r>   r?   r   r   r(   r)   r,   r*   r   r   r@   r   rA   rl   )r%   r   r/   r-  rG  r   r   r0  r   r  rE   r6   r6   r7   update_customer  s4    
$		

rM  c             O   s   t  d  y |  j d } |  j d } t j j d |  j   } | r t j j d | d |  j   } | ry t d  St j j d | d |  } | r t d  Sn
 t d  SWn9 t	 k
 r } z t  |  t d  SWYd	 d	 } ~ Xn Xd	 S)
z<This function is being used to add the city details by AdminzAdmin - in add_city functioncountrycityr   r   r   r   r   N)
r$   r>   Countryr(   r)   r*   Cityr   r   rA   )r%   r   r/   rN  rO  Zcountry_objZcity_objrE   r6   r6   r7   add_city  s     
!

rR  c                   s(   e  Z d  Z d Z   f d d   Z   S)SuperAdminDashboardzsuperadmin_dashboard.htmlc       
         s  t  t |   j |   } t d  |  j j j d  rK |  j j d | d <|  j j j d  r |  j j d } t j j	 d |  j
   } | r | j d | j | d <t j j   j d  d d  } | | d	 <t j j	 d
 d d d  j   } t j j   } t j j	 d
 d d d  j   } | | d <| | d <| | d <t j j   j d  d d  d d d  }	 |	 | d <| S)z;This class shows the content on Superadmin dashboard screenzSuperAdminDashboard-in get r8   r   r   r   z-idN
   recent_customerjobsr   FemailverifiedTr   totalcustomerjobsr   r   r
   r   r   )r"   rS  r#   r$   r%   r&   r'   r   r(   r)   r*   r   r   ri   r   r   r   r   r   r   )
r.   r/   r0   r1   r2   rU  r   rW  r   r   )r5   r6   r7   r#     s(    
"
!!


/
z$SuperAdminDashboard.get_context_data)rG   rH   rI   rJ   r#   r6   r6   )r5   r7   rS    s   rS  c                   s(   e  Z d  Z d Z   f d d   Z   S)AdminDashboardzadmin_dashboard.htmlc       
         su  t  t |   j |   } t d  |  j j j d  rK |  j j d | d <|  j j j d  r |  j j d } t j j	 d |  j
   } | r | j d | j | d <t j j   j d  d d  } | | d	 <t j j	 d
 d  j   } t j j   } t j j	 d
 d  j   } | | d <| | d <| | d <t j j   j d  d d  d d d  }	 |	 | d <| S)z6This class shows the content on Admin dashboard screenzAdminDashboard-in get r8   r   r   r   z-idNrT  rU  rV  Tr   rW  r   r   r
   r   r   )r"   rX  r#   r$   r%   r&   r'   r   r(   r)   r*   r   r   ri   r   r   r   r   r   r   )
r.   r/   r0   r1   r2   rU  r   rW  r   r   )r5   r6   r7   r#      s(    
"



/
zAdminDashboard.get_context_data)rG   rH   rI   rJ   r#   r6   r6   )r5   r7   rX    s   rX  c                   s(   e  Z d  Z d Z   f d d   Z   S)AllVehicleTypeszadmin_showallvehicletypes.htmlc                s   t  t |   j |   } t d  t j j d d  } g  } | r xc | D][ } | j d | j d | j	 d | j
 d | j d | j d	 | j d
 | j d | j i  qJ W| | d <| S)zKThis class shows the content on show all vehicle types screen to Admin userzAllVehicleTypes-in get r   Fr   r   r   r   r   r   r   r   all_vehicletypes)r"   rY  r#   r$   r   r(   r)   r-   r   r   r   r   r   r   r   r   )r.   r/   r0   rZ  ru   vehicle)r5   r6   r7   r#     s"    
							
z AllVehicleTypes.get_context_data)rG   rH   rI   rJ   r#   r6   r6   )r5   r7   rY    s   rY  c                   s(   e  Z d  Z d Z   f d d   Z   S)AdminShowAllAdminszadmin_showalladmins.htmlc                s  t  t |   j |   } t d  t j j d d d d  j d  } g  } | r d } xv | D]n } t j j d |  j	   } | r_ | d	 7} | j
 d
 | d | j d | j d | j d d d | j i  q_ Wt | d  } t |  j j j d d	   }	 t d |	  y- | j |	  }
 t t |
   t d  Wn[ t k
 rh| j | j  }
 t d  Yn. t k
 r| j | j  }
 t d  Yn X|
 | d <| S)zGThis class shows the content on show all customers screen to Admin userzAdminShowAllAdmins-in get r?  Tr@  Fz-idr   r   r
   serialnor   r   r   r   Yesr      pagezpage = truyexcept1except2
all_admins)r"   r\  r#   r$   r   r(   r)   r   r+   r*   r-   r   r   r   r   r   r   r%   GETr?   r`  lenPageNotAnInteger	num_pages	EmptyPage)r.   r/   r0   Zall_admin_usersru   r]  Z
admin_userr3   	paginatorr`  rd  )r5   r6   r7   r#   8  s@    
$
			
z#AdminShowAllAdmins.get_context_data)rG   rH   rI   rJ   r#   r6   r6   )r5   r7   r\  4  s   r\  c                   s(   e  Z d  Z d Z   f d d   Z   S)AdminShowAllCustomerszadmin_showallcustomers.htmlc                s  t  t |   j |   } t d  t j j d d  j d  j d  } g  } | rEd } x | D] } | d 7} | j	 r d } n d	 } | j
 r d } n d	 } | j r d }	 n d	 }	 | j r | j }
 n d
 }
 | j s | j } n | j d | j } | j d | d |
 d | d | j d | d | d |	 d | j i  qb Wt | d  } t |  j j j d d   } t d |  y- | j |  } t t |   t d  Wn[ t k
 r| j | j  } t d  Yn. t k
 r	| j | j  } t d  Yn X| | d <| S)zGThis class shows the content on show all customers screen to Admin userzAdminShowAllCustomers-in get r   Fz-idr   r   r
   r^  NorN   r  r]  r   r   r   r   rV  r   r   r_  r`  zpage = ra  rb  rc  all_customers)r"   rk  r#   r$   r   r(   r)   r   r,   rV  r   r   r   rq   r   r-   r   r   r   r   r%   re  r?   r`  rf  rg  rh  ri  )r.   r/   r0   rm  ru   r]  rr   rV  r   r   r   r   rj  r`  )r5   r6   r7   r#   c  s^    
'
									
z&AdminShowAllCustomers.get_context_data)rG   rH   rI   rJ   r#   r6   r6   )r5   r7   rk  _  s   rk  c                   s(   e  Z d  Z d Z   f d d   Z   S)AdminShowAllCompanieszadmin_showallcompanies.htmlc                s   t  t |   j |   } t d  t j j d d  j d  } g  } | r xk | D]c } | j rk d } n d } | j	 d | j
 d | j d	 | j d
 | j j d | d | j i  qS W| | d <| S)zGThis class shows the content on show all companies screen to Admin userzAdminShowAllCompanies-in get r   Fr   r^  rl  r   r   r   r   r   r   all_companies)r"   rn  r#   r$   r   r(   r)   r,   r   r-   r   rq   r   r   r   r   )r.   r/   r0   ro  ru   r   r   )r5   r6   r7   r#     s"    
			
z&AdminShowAllCompanies.get_context_data)rG   rH   rI   rJ   r#   r6   r6   )r5   r7   rn    s   rn  c                   s(   e  Z d  Z d Z   f d d   Z   S)AdminShowAllDriverszadmin_showalldrivers.htmlc                s  t  t |   j |   } t d  t j j d d  j d  j d  } g  } | rd } xt| D]l} | d 7} d } | j	 d k r d	 } nu | j	 d k r d
 } n] | j	 d k r d } nE | j	 d k r d } n- | j	 d k r d } n | j	 d k rd } | j
 rd } n d } t j j d |  j   }	 |	 rS|	 j }
 |	 j } n d }
 d } | j d | d | j d | j d | j d | j j d | d | j d | j d | d |
 d  | d! | j i  qb W| | d" <| S)#zEThis class shows the content on show all drivers screen to Admin userzAdminShowAllDrivers-in get r   Fz-idr   r   r
   rN   BikeCarr   z	Small Van   z
Medium Van   z	Large Vanr   zNot Specifiedr^  rl  rp   r]  r   r   r  r   ra   vehiclenumberpreferredarear   latitude	longituder   r   )r"   rp  r#   r$   r   r(   r)   r   r,   ra   r   DriverCoordinatesr*   rw  rx  r-   r   rq   r   r   r   ru  rv  r   )r.   r/   r0   r   ru   r]  rp   ra   r   drivercoordinates_objrw  rx  )r5   r6   r7   r#     sX    
'
											
z$AdminShowAllDrivers.get_context_data)rG   rH   rI   rJ   r#   r6   r6   )r5   r7   rp    s   rp  c                   s(   e  Z d  Z d Z   f d d   Z   S)AllCountrieszadmin_allcountries.htmlc                s?   t  t |   j |   } t d  t j j   } | | d <| S)zGThis class shows the content on show all countries screen to Admin userzAllCountries-in get all_countries)r"   r{  r#   r$   rP  r(   r   )r.   r/   r0   r|  )r5   r6   r7   r#     s
    

zAllCountries.get_context_data)rG   rH   rI   rJ   r#   r6   r6   )r5   r7   r{    s   r{  c                   s(   e  Z d  Z d Z   f d d   Z   S)	AllCitieszadmin_allcities.htmlc                s?   t  t |   j |   } t d  t j j   } | | d <| S)zDThis class shows the content on show all cities screen to Admin userzAllCities-in get 
all_cities)r"   r}  r#   r$   rQ  r(   r   )r.   r/   r0   r~  )r5   r6   r7   r#     s
    

zAllCities.get_context_data)rG   rH   rI   rJ   r#   r6   r6   )r5   r7   r}    s   r}  c                   s4   e  Z d  Z d Z   f d d   Z d d   Z   S)
AdminLoginzadmin_login.htmlc                s   t  t |   j |   } | S)zDThis class shows the content on show all cities screen to Admin user)r"   r  r#   )r.   r/   r0   )r5   r6   r7   r#     s    zAdminLogin.get_context_datac       
      O   s  ywt  d  t d | j d d | j d  } | d k	 r`| j d | j d <t j j d t | j  d d  j	   } | j
 j d	  } | r d
 | j d <t j j d |  } t d d d d
 d d d | i  St j j d t | j  d d  j	   } | rJd | j d <t j j d |  } t d d d d d d d | i  St d d d d i  St d d d d i  SWnN t k
 r}	 z. t  d |	  t d d d t |	  i  SWYd d }	 ~	 Xn Xd S)z7This class is used for the login process for admin userzAdminLogin Web - in postr   r   r.  Nr   r@  Tnextr<   r8   r   r9   r=   r:   zsuperadmin login successfullredirectlinkr?  r;   zadmin login successfullr   zInvalid Credentials.zerror is)r$   r   r>   r&   r   r(   r)   r   r   r*   re  r?   r	   get_or_creater   rA   rl   )
r.   r%   r   r/   r   Zsuperadmin_objr  tokenr3   errorr6   r6   r7   rF     s*    
#*"*"zAdminLogin.post)rG   rH   rI   rJ   r#   rF   r6   r6   )r5   r7   r    s   r  )cr   r   django.views.generic.baser   django.httpr   r   r   django.contrib.authr   django.contrib.auth.modelsr   rest_framework.authtoken.modelsr	   
decoratorsr   django.utils.decoratorsr   Customer.modelsCustomer.commonfunctionsr   Driver.modelsmodelsr   r  r	  r   r  ior   PILr   django.confr   django.urlsr   Z	pywebpushr   r   rest_framework.viewsr   django.core.paginatorr   r   rL   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1  r2  r3  r4  r8  r9  r:  r;  r<  r>  rA  rD  rE  rF  rH  rI  rJ  rK  rL  rM  rR  rS  rX  rY  r\  rk  rn  rp  r{  r}  r  r6   r6   r6   r7   <module>   s   


<CL)9
$'-.7%1KI LSA'LA @*A6