3
a>                @   sp  d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
mZ d dlT d dlT d dlZd dlmZ d dlT d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d d	lmZ d d
lmZ d dlmZmZ d dlZd dlmZ d dlm Z  d dl!m"Z"m#Z#m$Z$ d dl%m&Z& d dl'Z'd dlZd dl(Z(d dl)m*Z* d dl+Z+d dl,m-Z- d dlZd dl.Z.dd Z/dd Z0dd Z1dd Z2dd Z3dd Z4G dd deZ5G d d! d!eZ6G d"d# d#eZ7G d$d% d%eZ8G d&d' d'eZ9G d(d) d)eZ:G d*d+ d+eZ;G d,d- d-eZ<G d.d/ d/eZ=G d0d1 d1eZ>G d2d3 d3eZ?G d4d5 d5eZ@G d6d7 d7eZAG d8d9 d9eZBG d:d; d;eZCG d<d= d=eZDG d>d? d?eZEG d@dA dAeZFG dBdC dCeZGG dDdE dEeZHG dFdG dGeZIG dHdI dIeZJG dJdK dKeZKG dLdM dMeZLG dNdO dOeZMG dPdQ dQeZNG dRdS dSeZOG dTdU dUeZPG dVdW dWeZQG dXdY dYeZRdZd[ ZSd\d] ZTG d^d_ d_eZUG d`da daeZVG dbdc dceZWG ddde deeZXG dfdg dgeZYG dhdi dieZZG djdk dkeZ[G dldm dmeZ\G dndo doeZ]G dpdq dqeZ^G drds dseZ_G dtdu dueZ`G dvdw dweZaG dxdy dyeZbG dzd{ d{eZcd|d} ZdG d~d deZeG dd deZfG dd deZgG dd deZhG dd deZiG dd deZjG dd deZkG dd deZlG dd deZmG dd deZnG dd deZodd ZpG dd deZqG dd deZrG dd deZsG dd deZtdS )    )render)APIView)authenticate)Token)HttpResponseJsonResponseHttpResponseRedirect)*N)	timedelta)	send_mail)settings)TemplateViewView)BytesIO)Image)getunreadnotificationcountsendfcmnotificationsend_text_message)make_password)Avg)TruncDayc             C   s   | dd  dkrH| d d dkrHd| dd  }|j dd}|d }|S | dd  dkr|| d d }|j dd}|d }|S | dd  dkr| d d dkr| d d }|j dd}|d }|S tt| d d d	 | dd
  }|d }|j dd}|S d S )N   AM1200  z:00PM      r    r    r    r    r    )replacestrint)str1res r&   7/var/www/html/Stanley/GoodsDelivery/API_Driver/views.py	convert24   s&      $r(   c             C   s  |dkr|| _ | j  dS |dkr4|| _| j  dS |dkrN|| _| j  dS |dkrh|| _| j  dS |dkr|| _| j  dS |dkr|| _| j  dS |dkr|| _| j  dS |d	kr|| _| j  dS |d
k r|| _	| j  dS |dkr|| _
| j  dS |dkr$|| _| j  dS |dkr@|| _| j  dS |dkr\|| _| j  dS |dkrx|| _| j  dS |dkr|| _| j  dS |dkr|| _| j  dS |dkr|| _| j  dS |dkr|| _| j  dS |dkr|| _| j  dS |dkr || _| j  dS |dkr<|| _| j  dS |dkrX|| _| j  dS |dkrt|| _| j  dS |dkr|| _| j  dS dS dS )N   1r            r         	   
      r                                       0)activeSlot1saveactiveSlot2activeSlot3activeSlot4activeSlot5activeSlot6activeSlot7activeSlot8activeSlot9activeSlot10activeSlot11activeSlot12activeSlot13activeSlot14activeSlot15activeSlot16activeSlot17activeSlot18activeSlot19activeSlot120activeSlot21activeSlot22activeSlot23activeSlot24)slotZidTSstatusr&   r&   r'   changeSlotStatus3   s    















r[   c             C   s  g }|j d| j| j| jdd |j d| j| j| jdd |j d| j| j| j	dd |j d| j
| j| jdd |j d| j| j| jdd |j d| j| j| jdd |j d| j| j| jdd |j d	| j| j| jd	d |j d
| j| j| jd
d |j d| j| j| jdd |j d| j| j | j!dd |j d| j"| j#| j$dd |j d| j%| j&| j'dd |j d| j(| j)| j*dd |j d| j+| j,| j-dd |j d| j.| j/| j0dd |j d| j1| j2| j3dd |j d| j4| j5| j6dd |j d| j7| j8| j9dd |j d| j:| j;| j<dd |j d| j=| j>| j?dd |j d| j@| jA| jBdd |j d| jC| jD| jEdd |j d| jF| jG| jHdd tI| |S )Nr)   )serialnoopeninghourclosinghourrZ   idr   r+   r,   r-   r   r.   r/   r0   r1   r2   r   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   )JappendopeninghourSlot1closinghourSlot1r@   openinghourSlot2closinghourSlot2rB   openinghourSlot3closinghourSlot3rC   openinghourSlot4closinghourSlot4rD   openinghourSlot5closinghourSlot5rE   openinghourSlot6closinghourSlot6rF   openinghourSlot7closinghourSlot7rG   openinghourSlot8closinghourSlot8rH   openinghourSlot9closinghourSlot9rI   openinghourSlot10closinghourSlot10rJ   openinghourSlot11closinghourSlot11rK   openinghourSlot12closinghourSlot12rL   openinghourSlot13closinghourSlot13rM   openinghourSlot14closinghourSlot14rN   openinghourSlot15closinghourSlot15rO   openinghourSlot16closinghourSlot16rP   openinghourSlot17closinghourSlot17rQ   openinghourSlot18closinghourSlot18rR   openinghourSlot19closinghourSlot19rS   openinghourSlot20closinghourSlot20rT   openinghourSlot21closinghourSlot21rU   openinghourSlot22closinghourSlot22rV   openinghourSlot23closinghourSlot23rW   openinghourSlot24closinghourSlot24rX   print)rY   timeslots_datar&   r&   r'   addSlots   s&   























r   c             C   s  t jj| d}d}d}d}d}xB|D ]8}tjj|dj }|jj}|jdkrTd}t|j	 t|j
 |j
}|jdd }	|jdd }
t|	}	t|
}
|	d	 |
 }t|	 t|
 t| t|d d
 }||k r|}td| t|j |j}|jdd }	|jdd }
t|	}	t|
}
|	d	 |
 }t|	 t|
 t| t|d d
 }||kr&|}q&W |dkr~t||d | d S )N)sameIdForParcelsDetailsTr>   r   )customerjobF-r)   r   r   Pickupslotid)CustomerJobobjectsfilter	DriverJobfirstdriverr_   jobcompletedr   pickuptimeslotDatepickuptimeslotsplitr(   r#   dropofftimeslotmakeslotAvailable)sameparcelIDcustomerjob_obj_allpackageCompleted	startSlotlastSlotdriverIDcustomerdJobstringFirstonetwopickupSlotIDstringSeconddeliverySlotIDr&   r&   r'   slotStatusonJobCompleteK  sP    





r   c             C   s  y| d } t jj|dj }tjj|dj }|r| dkrL|dkrLd|_| dkrb|dkrbd|_| dkrx|dkrxd|_| dkr|dkrd|_| dkr|dkrd|_	| d	kr|d	krd|_
| d
kr|d
krd|_| dkr|dkrd|_| dkr|dkrd|_| dkr|dkrd|_| dkr0|dkr0d|_| dkrJ|dkrJd|_| dkrd|dkrdd|_| dkr~|dkr~d|_| dkr|dkrd|_| dkr|dkrd|_| dkr|dkrd|_| dkr|dkrd|_| dkr |dkr d|_| dkr|dkrd|_| dkr4|dkr4d|_| dkrN|dkrNd|_| dkrh|dkrhd|_| dkr|dkrd|_|j  dS  tk
r } zt| dS d }~X nX d S )Nr)   )r_   )r   Tr   r+   r,   r-   r   r.   r/   r0   r1   r2   r   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   passfail) DriverModelr   r   r   DriverAllSlotsr@   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rA   	Exceptionr   )slotIdslotId2DriverID
driver_objdriverslotsobjer&   r&   r'   r   u  st    r   c             C   s  t jj| dj }ddlm} |j }|jd}t| t	jj
||d}|r
d|_d|_d|_d|_d	|_d|_d	|_d
|_d|_d
|_d|_d|_d|_d|_d|_d|_d|_d|_d|_d|_d|_d|_ d|_!d|_"d|_#d|_$d|_%d|_&d|_'d|_(d|_)d|_*d|_+d|_,d|_-d|_.d|_/d|_0d|_1d|_2d|_3d|_4d|_5d|_6d|_7d|_8d|_9d|_:d|_;d|_<d|_=d|_>d|_?d|_@d|_Ad|_Bd|_Cd|_Dd|_Ed|_Fd|_Gd|_Hd|_Id|_Jd|_Kd|_Ld|_Md|_Nd|_Od|_Pd|_Qd|_R|jS  dS d S )!N)r_   r   )havedatetimez%d-%b-%Y)r   dateOfSlotsz00:00:00z01:00:00Tz02:00:00z03:00:00z04:00:00z05:00:00z06:00:00z07:00:00z08:00:00z09:00:00z10:00:00z11:00:00z12:00:00z13:00:00z14:00:00z15:00:00z16:00:00z17:00:00z18:00:00z19:00:00z20:00:00z21:00:00z22:00:00z23:00:00r*   r?   )Tr   r   r   r   datetimer   nowstrftimer   r   createra   rb   r@   rc   rd   rB   re   rf   rC   rg   rh   rD   ri   rj   rE   rk   rl   rF   rm   rn   rG   ro   rp   rH   rq   rr   rI   rs   rt   rJ   ru   rv   rK   rw   rx   rL   ry   rz   rM   r{   r|   rN   r}   r~   rO   r   r   rP   r   r   rQ   r   r   rR   r   r   rS   r   r   rT   r   r   rU   r   r   rV   r   r   rW   r   r   rX   rA   )r   r   r   dat1dat2r   r&   r&   r'   createDriverSlots  s    
r   c               @   s   e Zd Zdd ZdS )safePalaceImagec             O   s\  y(t d t d t d|j |jjd}|s>tdddS |jjd}|s\tdd	dS |jjd
}|sztdddS |jjd}|stdddS tjj|dj }|rt	jj|dj }	|	r
t
jj||	dj }
|j}|jd}t|d! }t|j }tj|}djdd tdD }ttjd t|	j d t|j t| }tjj }tjj|rnn
tj| |j|d |  dt|	j d t|j t| d | }|
r||
_||
_|
j  nt
jj ||	||d}
|
rtdddS tdddS ntdddS ntdddS W n, t!k
rV } ztdd dS d }~X nX d S )"Nz

z"Uploading safe image API - in postzdata is  : session_tokeni  zUser not logged in.)status_codestatus_messagecustomer_idzcustomer_id is required	driver_idzdriver_id is RequiredimagezImage is Required)r_   )
driver_jobr   .r)   r   c             S   s   g | ]}t jtjtj qS r&   )randomchoicestringascii_lettersdigits).0nr&   r&   r'   
<listcomp>*  s    z(safePalaceImage.post.<locals>.<listcomp>r   z/media/safepalaceimages/_z/image_of_safe_palace.)r   r   	safeplace
created_at   successi  ZFailedzCustomer job not foundzDriver job not founderror)"r   POSTgetr   FILESr   r   r   r   r   DriverDropSafePalacenamer   r"   r   readr   openjoinranger   BASE_DIRr_   r   r   ospathexistsmakedirsrA   r   r   r   r   )selfrequestargskwargssession_token_valr   r   r   driverjob_objcustomerjob_objZsafedrop_objfilename	extension
image_dataimgstfilepathcurrent_dater   r&   r&   r'   post  s\    

.

,
zsafePalaceImage.postN)__name__
__module____qualname__r   r&   r&   r&   r'   r   
  s   r   c               @   s   e Zd Zdd ZdS )startJobDropOffLocationc          A   O   s  t d t d t d|j |jjd}|s:tdddS t d yV|jjd	}|sdtdd
dS tj|}x|D ]}t d t d |d }|d }|d }	|d }
t | t | t t| t t| tjj	||dj
 }t | |rtd|_|j  y^tjj }tjj	|dj
 }|r8||_|j  n(tjj	|dj
 }|r`tjj||d W n, tk
r } zt | W Y d d }~X nX yt|jjdddd W n, tk
r } zt | W Y d d }~X nX yt|jjjdddd W n, tk
r } zt | W Y d d }~X nX y&tjj|jjj|jjddddd W n, tk
rp } zt | W Y d d }~X nX qvt d tdddS qvW td d!dS  tk
r } zt | td"d#dS d }~X nX d S )$Nz

z!DriverArrivedPickup API - in postzdata is  : r   i  zUser not logged in.)r   r   r   data_idszData is Requiredr   zcount for manpreetcustomerjobiddriverjobidlatitude	longitude)r_   customerjob_idT)job_id)r_   )jobdriver_pickuparrived_datetimer   statuschangeKwickDeliveryzStarted Drop Off Location Jobr   z$Driver Started Drop Off Location Jobunread)userr  forcustomernotificationtypenotificationtextrZ   threezNot a valid requestr   r   i  zInternal Server Error)r   r   r   r   jsonloadstyper   r   r   r   start_DropOffrA   r   r   CustomerJobDateTimestartDropOffTimer   r   r   r   r   fcmtokenr   r   Notificationsr  r_   )r   r   r   r   r   r   idscustomerjobid_valdriverjobid_vallatitude_vallongitude_valr   r   customerjobdatetime_objr   r   r&   r&   r'   r   H  sr    


&zstartJobDropOffLocation.postN)r   r   r   r   r&   r&   r&   r'   r   F  s   r   c               @   s   e Zd Zdd ZdS )arrivedAtDropOffLocationc          A   O   s  t d t d t d|j |jjd}|s:tdddS t d yF|jjd	}|sdtdd
dS tj|}x|D ]}t d t d |d }|d }t | t | t t| t t| tjj	||dj
 }	t |	 |	rdd|	_|	j  y^tjj }
tjj	|dj
 }|r(|
|_|j  n(tjj	|dj
 }|rPtjj||
d W n, tk
r~ } zt | W Y d d }~X nX yt|	jjdddd W n, tk
r } zt | W Y d d }~X nX yt|	jjjdddd W n, tk
r } zt | W Y d d }~X nX y&tjj|	jjj|	jjddddd W n, tk
r` } zt | W Y d d }~X nX qvt d tdddS qvW tdddS  tk
r } zt | td d!dS d }~X nX d S )"Nz

z!DriverArrivedPickup API - in postzdata is  : r   i  zUser not logged in.)r   r   r   r   zData is Requiredr   zcount for manpreetr  r  )r_   r  T)r  )r_   )r  r  r   r	  r
  zArrived at Drop Off Locationr   z#Driver Arrived at Drop Off Locationr  )r  r  r  r  r  rZ   r  zNot a valid requestr   r   i  zInternal Server Error)r   r   r   r   r  r  r  r   r   r   r   arrived_atDropOffLocationrA   r   r   r  arrivedDropOffLocationr   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     sn    


&zarrivedAtDropOffLocation.postN)r   r   r   r   r&   r&   r&   r'   r    s   r  c               @   s   e Zd Zdd ZdS )StartDriverJobc          A   O   s  t d t d t d|j |jjd}|s:tdddS t d yF|jjd	}|sdtdd
dS tj|}x|D ]}t d t d |d }|d }t | t | t t| t t| tjj	||dj
 }	t |	 |	rdd|	_|	j  y^tjj }
tjj	|dj
 }|r(|
|_|j  n(tjj	|dj
 }|rPtjj||
d W n, tk
r~ } zt | W Y d d }~X nX yt|	jjdddd W n, tk
r } zt | W Y d d }~X nX yt|	jjjdddd W n, tk
r } zt | W Y d d }~X nX y&tjj|	jjj|	jjddddd W n, tk
r` } zt | W Y d d }~X nX qvt d tdddS qvW td d!dS  tk
r } zt | td"d#dS d }~X nX d S )$Nz

z!DriverArrivedPickup API - in postzdata is  : r   i  zUser not logged in.)r   r   r   r   zData is Requiredr   zcount for manpreetr  r  )r_   r  T)r  )r_   )r  r  r   r	  r
  zYou have Start Your jobr   zDriver has Start the JobzDriver Job StartedzDriver has Start the jobr  )r  r  r  r  r  rZ   r  zNot a valid requestr   r   i  zInternal Server Error)r   r   r   r   r  r  r  r   r   r   r   
jobstartedrA   r   r   r  driver_job_started_datetimer   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     sn    


&zStartDriverJob.postN)r   r   r   r   r&   r&   r&   r'   r"    s   r"  c               @   s   e Zd Zdd ZdS )DriverDeleteVehiclec             O   sB  t d t d t d|j y|jjd}|jjd}|sHtdddS |sZtdd	dS tjj|d
j }|rtjj|j	dj }|rt
jj|dj }|rtjj||djdd}	|	rtdddS tdddS qtdddS ntdddS ntdddS W n4 tk
r< }
 zt |
 tdddS d }
~
X nX d S )Nz

z!DriverDeleteVehicle API - in postzdata is  : r   	vehicleidi  zUser not logged in.)r   r   zvehicleid is required.)key)r_   )r  )r   r_   T)
is_deletedr   r   zInternal Server Errori  )r   r   r   r   r   r   r   r   Useruser_idr   DriverVehicleupdater   )r   r   r   r   r   r&  	token_objuser_objr   drivervehicle_objr   r&   r&   r'   r   L  s4    zDriverDeleteVehicle.postN)r   r   r   r   r&   r&   r&   r'   r%  J  s   r%  c               @   s   e Zd Zdd ZdS )DriverSelectActiveVehiclec             O   s  t d t d y|jjd}|jjd}|s<tdddS |sNtdddS tjj|d	j }|rtjj|j	d
j }|rt
jj|dj }|rtjj|djdd}	|	rtjj||djdd}	|	rtdddS W n4 tk
r }
 zt |
 tdddS d }
~
X nX d S )Nz

z'DriverSelectActiveVehicle API - in postr   r&  i  zUser not logged in.)r   r   zvehicleid is required.)r'  )r_   )r  )r   F)active)r   r_   Tr   r   i  zInternal Server Error)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  s.    zDriverSelectActiveVehicle.postN)r   r   r   r   r&   r&   r&   r'   r0  p  s   r0  c               @   s   e Zd Zdd ZdS )DriverVehicleListc             C   s  t d|j yj|jjd}|s.tdddS g }tjj|dj }|rbtjj|j	dj }|rbt
jj|dj }|rbtjj|d	d
}|rbx|D ]}|jrttj|jj }	nd}	|jrttj|jj }
nd}
|jrttj|jj }nd}|jrttj|jj }nd}|jr$d}nd}|j|j|j|	|j|
|j||j||j|j||jd qW t | td|ddS  tk
r } zt | tdddS d}~X nX dS )z4 This API method is used to get profile data of userzdata is  : r   i  zUser not logged in)r   r   )r'  )r_   )r  F)r   r(  r   r1  inactive)vehiclenumbervehicletypevehicleimagevehicleimage_statusmotor_insurancemotor_insurance_statusgoods_in_transit_covergoods_in_transit_cover_statuspublic_liability_insurance!public_liability_insurance_statusr_   rZ   Zvehical_approve_statusr   r   )r   datar   i  zInternal Server ErrorN)r   GETr   r   r   r   r   r   r)  r*  r   r+  r6  r"   r   MEDIA_BASE_URLr   r8  r:  r<  r1  r`   r4  r5  r7  r9  r;  r=  r_   Zvehicle_approve_statusr   )r   r   r   Zvehiclelist_datar-  r.  r   r/  vehicler6  r8  r:  r<  rZ   r   r&   r&   r'   r     sb    
zDriverVehicleList.getN)r   r   r   r   r&   r&   r&   r'   r2    s   r2  c               @   s   e Zd Zdd ZdS )DriverUpdateVehiclec                s6  t d t d yd' fdd	}|jjd}|jjd}|jjd}|jjd	}|jjd
}	|jjd}
|s|tdddS |stdddS |stdddS |	stdddS |
stdddS tjj|dj }|rtjj|j	dj }|rt
jj|dj   r|
dkr4d}tjj djdd nd}tjj |dj||	|d}|r|rd| }t d |||d}t d  |d!krtd"d#dS tdd$dS ntd"d#dS ntdd$dS ntdd$dS ntdd$dS ntdd$dS W n4 tk
r0 } zt | td%d&dS d }~X nX d S )(Nz

z!DriverUpdateVehicle API - in post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 t d tj|}	t d tj	j
|d}
djdd tdD }ttjd t j d t jj }tjj|rn
tj| tj|}	|	j|d | d |  dt j d t jj d | d | }||
_|
j  dS )Nz

r?   z;base64,r*   r   2/3r)   456789)r_   r   c             S   s   g | ]}t jtjtj qS r&   )r   r   r   r   r   )r   r   r&   r&   r'   r     s    zGDriverUpdateVehicle.post.<locals>.getI420FromBase64.<locals>.<listcomp>r   z/media/Users/Drivers/r   r   )r   r   r"   base64	b64decoder   r   r   r+  r   r   r   r   r   r   r_   r  emailr   r   r   mkdirrA   r6  )codecid_val
image_pathbase64_dataextensextr   	byte_datar   r   r/  r   r   r   )r   r&   r'   getI420FromBase64  sB    



(

.z3DriverUpdateVehicle.post.<locals>.getI420FromBase64r   r&  r6  r4  r5  rZ   i  zUser not logged in.)r   r   zvehicleid is required.zvehiclenumber is required.zvehicletype is required.zstatus is required.)r'  )r_   )r  r1  T)r   F)r1  )r   r_   )r4  r5  r1  zdata:image/png;base64,zbefore function call)rR  zafter function callr*   r   r   zNot a valid requesti  zInternal Server Error)rC  )r   r   r   r   r   r   r   r   r)  r*  r   r+  r,  r   )r   r   r   r   rX  r   r&  r6  r4  r5  rZ   r-  r.  r1  r/  rQ  r%   r   r&   )r   r'   r     s`    -

zDriverUpdateVehicle.postN)r   r   r   r   r&   r&   r&   r'   rB    s   rB  c               @   s   e Zd Zdd ZdS )DriverAddVehiclec                sz  t d t d y.d' fdd	}|jjd}|jjd}|jjd}|jjd	}|jjd
}	|sptdddS |stdddS |stdddS |stdddS |	stdddS tjj|dj }
|
r0tjj|
j	dj }|r t
jj|dj   r|	dkr(d}tjj djdd nd}y$tjj|dj }| _ j  W n, tk
r| } zt | W Y d d }~X nX tjj |||d}|r |rd| }t d |||jd}t d |d krtd!d"|jd#S tdd$dS ntdd$dS ntdd$dS ntdd$dS ntdd$dS ntdd$dS W n4 tk
rt } zt | td%d&dS d }~X nX d S )(Nz

zAddVehicle API - in post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 t d tj|}	t d tj	j
|d}
djdd tdD }ttjd t j d t jj t| }tjj|rn
tj| tj|}	|	j|d | d |  dt j d t jj t| d | d | }||
_|
j  dS )Nz

r?   z;base64,r*   r   rD  rE  rF  r)   rG  rH  rI  rJ  rK  rL  )r_   r   c             S   s   g | ]}t jtjtj qS r&   )r   r   r   r   r   )r   r   r&   r&   r'   r   f  s    zDDriverAddVehicle.post.<locals>.getI420FromBase64.<locals>.<listcomp>r   z/media/Users/Drivers/r   r   )r   r   r"   rM  rN  r   r   r   r+  r   r   r   r   r   r   r_   r  rO  r   r   r   rP  rA   r6  )rQ  rR  rS  rT  rU  rV  r   rW  r   r   r/  r   r   r   )r   r&   r'   rX  M  sB    



0

6z0DriverAddVehicle.post.<locals>.getI420FromBase64r   r6  r4  r5  rZ   i  zUser not logged in.)r   r   zvehicleimage is required.zvehiclenumber is required.zvehicletype is required.zstatus is required.)r'  )r_   )r  r1  T)r   F)r1  )r   )r   r4  r5  r1  zdata:image/png;base64,zbefore function call)rR  zafter function callr*   r   r   )r   r   r&  zNot a valid requesti  zInternal Server Error)rZ  )r   r   r   r   r   r   r   r   r)  r*  r   r+  r,  VehicleTyper5  rA   r   r   r_   )r   r   r   r   rX  r   r6  r4  r5  rZ   r-  r.  r1  Zvehical_list_objr   r/  rQ  r%   r&   )r   r'   r   H  sj    *

zDriverAddVehicle.postN)r   r   r   r   r&   r&   r&   r'   rY  F  s   rY  c               @   s   e Zd Zdd ZdS )UploadDocumentExtraTestc             O   s  t d t d ydd }|jjd}|jjd}|jjd}|jjd}|s^td	d
dS |sptd	ddS |std	ddS tjj|dj }	|	rt	jj|	j
dj }
|
rtjj|
dj }|r|rtjj|jd}|dkr|}|j}|jd}t|d/ }t|j }tj|}djdd tdD }ttjd t|j d t|jj d t| }tjj|r~n
tj| tj|}|j|d | d |  dt|j d t|jj d t| d | d | }|dkr|}t d |j}|jd}t|d0 }t d djdd tdD }ttjd t|j d t|jj d | }t d tjj|rn
tj| t d  dt|j d t|jj d t| d | d | }t d! ||ttj| }|dkrt d" nt d# t d$ |d%kr$||_d|_ n^|d&kr<||_!d|_"nF|d'krT||_#d|_$n.|d(krl||_%d|_&n|d)kr||_'d|_(|j  td*d+dS td	d,dS ntd	d,dS ntd	d,dS ntd	d,dS W n4 t)k
r } zt | td-d.dS d }~X nX d S )1Nz

zUploadDocument API - in postc          
   S   sF   t d t d t|d"}x| j D ]}|j| q&W W d Q R X dS )Nzin upload functionzWriting filezwb+r)   )r   r   chunkswrite)filer   fchunkr&   r&   r'   upload_func  s    z1UploadDocumentExtraTest.post.<locals>.upload_funcr   document_namer_  	file_typei  zUser not logged in.)r   r   zdocument_name is required.zFile is required.)r'  )r_   )r  r   r   r)   r   c             S   s   g | ]}t jtjtj qS r&   )r   r   r   r   r   )r   r   r&   r&   r'   r     s    z0UploadDocumentExtraTest.post.<locals>.<listcomp>r   z/media/Users/Drivers/r   rE  pdfzfirst filedzsecond filedc             S   s   g | ]}t jtjtj qS r&   )r   r   r   r   r   )r   r   r&   r&   r'   r   '  s    zthird filedzfourth filedzin upload function beforezfile saved successfullyzfile not savedzfirst fifthlicense_frontlicense_backid_frontid_backcrb_dbsr   r   zNot a valid requesti  zInternal Server Errorr   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  rO  r   r   r   rP  rA   rf  license_front_documentStatusrg  license_back_documentStatusrh  id_front_documentStatusri  id_back_documentStatusrj  crb_dbs_documentStatusr   )r   r   r   r   rb  r   rc  document_filerd  r-  r.  r   r   r   r   r   r   r   r   pdf_filer%   r   r&   r&   r'   r     s    5


4

:

0
:






zUploadDocumentExtraTest.postN)r   r   r   r   r&   r&   r&   r'   r\    s   r\  c               @   s   e Zd Zdd ZdS )VehicleUploadDocumentExtraTestc                s^  t d t d yd. fdd	}dd }|jjd}|jjd	}|jjd
}|jjd}	|jjd}
|sxtdddS |stdddS |stdddS |	stdddS |
stdddS tjj|dj }|rt	jj|j
dj }|rtjj|dj   rtjj dj } r|rtjj|d}|
dkr~|	}|j}|jd}t|d/ }t|j }tj|}djdd tdD }ttjd t j d  t jj d  t| }tjj|rn
tj| |j|d! | d |  dt j d  t jj d  t| d! | d | }|d"krH||_ d|_!n.|d#kr`||_"d|_#n|d$krv||_$d|_%|j  |
d%kr|	}|j}|jd}t|d0 }djd&d tdD }ttjd t j d  t jj d  t| }tjj|rn
tj| dt j d  t jj d  t| d! | d | }||ttj| }|dkrpt d' nt d( |d"kr||_ d|_!n.|d#kr||_"d|_#n|d$kr||_$d|_%|j  td)d*dS tdd+dS ntdd+dS ntdd+dS ntdd+dS ntdd+dS W n4 t&k
rX } zt | td,d-dS d }~X nX d S )1Nz

z#VehicleUploadDocument API - in postc:\c                s  t | 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 t d tj|	}
t d tj	j
|d}djdd tdD }ttjd t j d t jj }tjj|rn
tj| tj|	}
|
j|d | d |  dt j d t jj d | d | }|dkr||_n"|dkr||_n|dkr||_|j  dS )Nz

r?   z;base64,r*   r   rD  rE  rF  r)   rG  rH  rI  rJ  rK  rL  )r_   r   c             S   s   g | ]}t jtjtj qS r&   )r   r   r   r   r   )r   r   r&   r&   r'   r     s    zRVehicleUploadDocumentExtraTest.post.<locals>.getI420FromBase64.<locals>.<listcomp>r   z/media/Users/Drivers/r   r   r8  r:  r<  )r   r   r"   rM  rN  r   r   r   r+  r   r   r   r   r   r   r_   r  rO  r   r   r   rP  rA   r8  r:  r<  )rQ  rR  rc  rS  rT  rU  rV  r   rW  r   r   r/  r   r   r   )r   r&   r'   rX  u  sN    



(

.


z>VehicleUploadDocumentExtraTest.post.<locals>.getI420FromBase64c          
   S   s>   t d t|d"}x| j D ]}|j| qW W d Q R X dS )NzWriting filezwb+r)   )r   r   r]  r^  )r_  r   r`  ra  r&   r&   r'   rb    s
    z8VehicleUploadDocumentExtraTest.post.<locals>.upload_funcr   drivervehicle_idrc  r_  rd  i  zUser not logged in.)r   r   zdrivervehicle_id is required.zdocument_name is required.zFile is required.zFile Type is required.)r'  )r_   )r  )r   r   r   r)   r   c             S   s   g | ]}t jtjtj qS r&   )r   r   r   r   r   )r   r   r&   r&   r'   r     s    z7VehicleUploadDocumentExtraTest.post.<locals>.<listcomp>r   z/media/Users/Drivers/r   rE  r8  r:  r<  re  c             S   s   g | ]}t jtjtj qS r&   )r   r   r   r   r   )r   r   r&   r&   r'   r     s    zfile saved successfullyzfile not savedr   r   zNot a valid requesti  zInternal Server Error)rs  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  rO  r   r   r   r   rA   r8  r9  r:  r;  r<  r=  r   )r   r   r   r   rX  rb  r   rt  rc  rp  rd  r-  r.  r/  r   r   r   r   r   r   r   rq  r%   r   r&   )r   r'   r   p  s    /


4
:




4
:




z#VehicleUploadDocumentExtraTest.postN)r   r   r   r   r&   r&   r&   r'   rr  n  s   rr  c               @   s   e Zd Zdd ZdS )VehicleUploadDocumentc                s  t d t d yd fdd	}|jjd}|jjd}|jjd}|jjd	}|sdtd
ddS |svtd
ddS |std
ddS |std
ddS tjj|dj }	|	rtjj|	j	dj }
|
rt
jj|
dj   rptjj dj } r`|rPd| }t d ||||d}t d |dkr@tdddS td
ddS ntd
ddS ntd
ddS ntd
ddS ntd
ddS ntd
ddS W n4 tk
r } zt | tdddS d }~X nX d S )Nz

z#VehicleUploadDocument API - in postc:\c                s  t | 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 t d tj|	}
t d tj	j
|d}djdd tdD }ttjd t j d t jj }tjj|rn
tj| tj|	}
|
j|d | d |  dt j d t jj d | d | }|dkr||_n"|dkr||_n|dkr||_|j  dS )Nz

r?   z;base64,r*   r   rD  rE  rF  r)   rG  rH  rI  rJ  rK  rL  )r_   r   c             S   s   g | ]}t jtjtj qS r&   )r   r   r   r   r   )r   r   r&   r&   r'   r   G  s    zIVehicleUploadDocument.post.<locals>.getI420FromBase64.<locals>.<listcomp>r   z/media/Users/Drivers/r   r   r8  r:  r<  )r   r   r"   rM  rN  r   r   r   r+  r   r   r   r   r   r   r_   r  rO  r   r   r   rP  rA   r8  r:  r<  )rQ  rR  rc  rS  rT  rU  rV  r   rW  r   r   r/  r   r   r   )r   r&   r'   rX  -  sN    



(

.


z5VehicleUploadDocument.post.<locals>.getI420FromBase64r   rt  rc  document_imagei  zUser not logged in.)r   r   zdrivervehicle_id is required.zdocument_name is required.zdocument_image is required.)r'  )r_   )r  )r   zdata:image/png;base64,zbefore function call)rR  rc  zafter function callr*   r   r   zNot a valid requesti  zInternal Server Error)rv  )r   r   r   r   r   r   r   r   r)  r*  r   r+  r   )r   r   r   r   rX  r   rt  rc  rw  r-  r.  r/  rQ  r%   r   r&   )r   r'   r   (  sP    0
zVehicleUploadDocument.postN)r   r   r   r   r&   r&   r&   r'   ru  &  s   ru  c               @   s   e Zd Zdd ZdS )UploadDocumentc             O   s  t d t d yFddd}|jjd}|jjd}|jjd}|sTtd	d
dS |sftd	ddS |sxtd	ddS tjj|dj }|rHtjj|j	dj }	|	r8t
jj|	dj }
|
r(|rd| }t d |||
j|d}t d |dkrtdddS td	ddS ntd	ddS ntd	ddS ntd	ddS ntd	ddS W n4 tk
r } zt | tdddS d }~X nX d S )Nz

zUploadDocument API - in postc:\c                s"  t | 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tjd t|j d t|jj }|jj|rDn
|j| |
j|	}|j|d | d |  dt|j d t|jj d | d | }|dkr||_d	|_n^|dkr||_d	|_nF|dkr||_d	|_n.|dkr ||_ d	|_!n|dkr||_"d	|_#|j  dS )Nz

r?   z;base64,r*   r   rD  rE  rF  r)   rG  rH  rI  rJ  )r   rK  rL  )r_   r   c                s   g | ]} j jj qS r&   )r   r   r   )r   r   )r   r   r&   r'   r     s    zBUploadDocument.post.<locals>.getI420FromBase64.<locals>.<listcomp>r   z/media/Users/Drivers/r   r   rf  rg  rh  ri  rj  )$r   r   r"   rM  rN  r   PILr   r   r   r   r   r   r   r   r   r   r   r   r_   r  rO  r   r   rP  rA   rf  rk  rg  rl  rh  rm  ri  rn  rj  ro  )rQ  rR  rc  rS  rT  rU  rV  r   rW  r   r   r   r   r   r   r   r   r&   )r   r   r'   rX    sd    



(

.




z.UploadDocument.post.<locals>.getI420FromBase64r   rc  rw  i  zUser not logged in.)r   r   zdocument_name is required.zdocument_image is required.)r'  )r_   )r  zdata:image/png;base64,zbefore function call)rR  rc  zafter function callr*   r   r   zNot a valid requesti  zInternal Server Error)ry  )r   r   r   r   r   r   r   r   r)  r*  r   r_   r   )r   r   r   r   rX  r   rc  rw  r-  r.  r   rQ  r%   r   r&   r&   r'   r     sD    
;
zUploadDocument.postN)r   r   r   r   r&   r&   r&   r'   rx    s   rx  c               @   s   e Zd Zdd ZdS )#FilterDriverPaymentHistoryExtraTestc       !         s  t d|j yb|jjd}|s.tdddS |jjd}|jjd}|jjd}|jjd	}g }tjj|d
j }|rZtjj|j	dj }	|	rZt
jj|	dj }
|
rZ|dkr|jjd}|jjd d}tjj|d}tjjtjj tjjj   | jd }t | x fddt|D D ]}|j }tjj }t |j |j}tjj|
||ddj }t d| tjj|
||dd}tjj|tjj j }tjj|tjjj }|r,t d tjtj}|j|}|j|}xf|D ]^}tjj|jdj }|rt |j |jr.||jkr.|j}|j r||j k r|j }qW t d| t d| |r,|r,|| }|j!}|d }t | t |
j" |
j"j#}|
j"j$}t d| t d| t%t&|| |d |  d}t | |j'|||||||d  q,W td!|d"d#S |dkr|jjd}|jjd d}tjj|d}tjjtjj tjjj   | jd }t | tjj }x fd$dt|D D ]}|j(|j(kr|j }tjj }t |j |j}|j(}t | tjj|
|dd%j }t d| tjj|
|dd%}tjj|tjj j }tjj|tjjj }|rt d tjtj}|j|}|j|}xf|D ]^}tjj|jdj }|rrt |j |jr||jkr|j}|j rr||j k rr|j }qrW t d| t d| |r|r|| }|j!}|d }t | t |
j" |
j"j#}|
j"j$}t d| t d| t%t&|| |d |  d}t | |j'|||||||d  qW td!|d"d#S |dkrL|jjd}|jjd tjj }t |j t)d&d'  t%|j t)d&d' }|j*d(}t%|d d) t%|d  d) t%|d*  }t | tjj|d}tjjtjj tjjj   | jd }t | ẋ fd+dt|D D ]}|j }tjj|
|dd%j }t d| tjj|
|dd%}tjj|tjj j }tjj|tjjj }|rt d tjtj}|j|}|j|}xf|D ]^}tjj|jdj }|r(t |j |jrj||jkrj|j}|j r(||j k r(|j }q(W t d| t d| |r|r|| }|j!}|d }t | t |
j" |
j"j#}|
j"j$}t d| t d| t%t&|| |d |  d}t | |j'|||||||d  qW td!|d"d#S |dk
rtjj }|j }tjj|
|dd%j }t d| tjj|
|dd%}tjj|tjj j }tjj|tjjj }|
r
t d tjtj}|j|}|j|}xf|D ]^}tjj|jdj }|rt |j |j	r>||jk	r>|j}|j r||j k r|j }qW t d| t d| |
r
|
r
|| }|j!}|d }t | t |
j" |
j"j#}|
j"j$}t d| t d| t%t&|| |d |  d}t | |j'|||||||d  td!|d"d#S |jjd}|jjd d}tjj|d}tjjtjj tjjj   | jd }t | x fd,dt|D D ]}|j }t d-| tjj|
|dd%j }t d| tjj|
|dd%}tjj|tjj j }tjj|tjjj }|rLt d tjtj}|j|}|j|}xf|D ]^}tjj|jdj }|r<t |j |jr~||jkr~|j}|j r<||j k r<|j }q<W t d| t d| |rT|rT|| }|j!}|d }t | t |
j" |
j"j#}|
j"j$}t d| t d| t%t&|| |d |  d}t | |j'|||||||d  nt d. 
qW t | td!|d"d#S  t+k
r }  zt |  td/d0dS d1} ~ X nX d1S )2z4 This API method is used to get profile data of userzdata is  : r   i  zUser not logged in)r   r   monthyearweekday)r'  )r_   )r  yes	from_dateto_datez
01/08/2020z%d/%m/%Yr)   c             3   s   | ]} t | V  qd S )N)r
   )r   r   )r  r&   r'   	<genexpr>  s    z:FilterDriverPaymentHistoryExtraTest.get.<locals>.<genexpr>T)r   created_at__containsZcreated_at__yearr   zno_of_drops = zin if)r  zmin_time = zmax_time = <   zpriceperdrop = zpriceperhour = r   )no_of_dropspriceperdroppriceperhourmin_timemax_timedatetotal_pricer   r   )r   r>  r   c             3   s   | ]} t | V  qd S )N)r
   )r   r   )r  r&   r'   r  `  s    )r   r  r   r.   )daysr   rE  r   c             3   s   | ]} t | V  qd S )N)r
   )r   r   )r  r&   r'   r    s    c             3   s   | ]} t | V  qd S )N)r
   )r   r   )r  r&   r'   r  O  s    zdate = elsei  zInternal Server ErrorN),r   r?  r   r   r   r   r   r   r)  r*  r   r   strptimecombiner  todaymintimer  r   r   r}  r   countpytztimezoner   	TIME_ZONElocalizer  r   r  itemsdelivered_datetimesecondsr5  r  r  r"   roundr`   r|  r
   r   r   )!r   r   r   Zmonth_filterZyear_filterZweek_filterZ
day_filterpaymenthistory_datar-  r.  r   r  	day_countr  r  Zfindyeardater  r   r  r  utc	driverjobr  tdeltar  total_minutesr  r  r  Z
findmonthsZtoday1
start_dater   r&   )r  r'   r     sL   
 













 














,
 






















 










9z'FilterDriverPaymentHistoryExtraTest.getN)r   r   r   r   r&   r&   r&   r'   r{    s   r{  c               @   s   e Zd Zdd ZdS )DriverPaymentHistoryc                s
  t d|j y|jjd}|s.tdddS g }tjj|dj }|rtjj|j	dj }|rt
jj|dj }|r|jjd	}|jjd
 d}tjj|d}tjjtjj tjjj   | jd }t | xއ fddt|D D ]}	|	j }	t d|	 tjj||	ddj }
t d|
 tjj||	dd}tjj|	tjj j }tjj|	tjjj }|rt d tjtj}|j|}|j|}xf|D ]^}tjj|jdj }|rt |j |jr||jkr|j}|jr||jk r|j}qW t d| t d| |r|r|| }|j }|d }t | t |j! |j!j"}|j!j#}t d| t d| t$t%|
| |d |  d}t | |j&|
|||||	|d qt d qW t | td|dd S  t'k
r } zt | td!d"dS d#}~X nX d#S )$z4 This API method is used to get profile data of userzdata is  : r   i  zUser not logged in)r   r   )r'  )r_   )r  r  r  z
01/08/2020z%d/%m/%Yr)   c             3   s   | ]} t | V  qd S )N)r
   )r   r   )r  r&   r'   r    s    z+DriverPaymentHistory.get.<locals>.<genexpr>zdate = T)r   r  r   zno_of_drops = zin if)r  zmin_time = zmax_time = r  zpriceperdrop = zpriceperhour = r   )r  r  r  r  r  r  r  r  r   r   )r   r>  r   i  zInternal Server ErrorN)(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  r5  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     s     










9zDriverPaymentHistory.getN)r   r   r   r   r&   r&   r&   r'   r    s   r  c               @   s   e Zd Zdd ZdS )DriverArrivedPickupExtraTestc          A   O   s  t d t d t d|j |jjd}|s:tdddS y|jjd}|s\tdd	dS tj|}x|D ]}t d
 t |d  t |d  |d }|d }tjj||dj	 }	|	r<d|	_
|	j  y^tjj }
tjj|dj	 }|r |
|_|j  n(tjj|dj	 }|r(tjj||
d W n, tk
rV } zt | W Y d d }~X nX yt|	jjdddd W n, tk
r } zt | W Y d d }~X nX yt|	jjjdddd W n, tk
r } zt | W Y d d }~X nX y&tjj|	jjj|	jjddddd W n, tk
r8 } zt | W Y d d }~X nX qntdddS qnW tdddS  tk
r } ztdd dS d }~X nX d S )!Nz

z!DriverArrivedPickup API - in postzdata is  : r   i  zUser not logged in.)r   r   r   zData is Requiredzcount for manpreetr  r  )r_   r  T)r  )r_   )r  r  r   r	  r
  z"You have arrived at pickup addressr   z)Driver has arrived at your pickup addresszDriver Arrivedz*Driver has arrived at your pickup address.r  )r  r  r  r  r  rZ   zNot a valid requestr   r   i  zInternal Server Error)r   r   r   r   r  r  r   r   r   r   arrived_at_pickuprA   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   a	  s`    


&z!DriverArrivedPickupExtraTest.postN)r   r   r   r   r&   r&   r&   r'   r  _	  s   r  c               @   s   e Zd Zdd ZdS )DriverArrivedPickupc          B   O   s^  t d t d t d|j |jjd}|s:tdddS |jjd}|sXtdd	dS y|jjd
}|sztdddS tjj||dj }|rd|_|j	  y\t
j
j }tjj|dj }	|	r||	_|	j	  n(tjj|dj }
|
 rtjj|
|d W n, tk
r* } zt | W Y d d }~X nX yt|jjdddd W n, tk
rp } zt | W Y d d }~X nX yt|jjjdddd W n, tk
r } zt | W Y d d }~X nX y&tjj|jjj|jjddddd W n, tk
r } zt | W Y d d }~X nX tdddS tdddS W n, tk
rX } ztdddS d }~X nX d S ) Nz

z!DriverArrivedPickup API - in postzdata is  : r   i  zUser not logged in.)r   r   r  zcustomerjobid is requiredr  zdriverjobid is required)r_   r  T)r  )r_   )r  r  r   r	  r
  z"You have arrived at pickup addressr   z)Driver has arrived at your pickup addresszDriver Arrivedz*Driver has arrived at your pickup address.r  )r  r  r  r  r  rZ   r   r   zNot a valid requesti  zInternal Server Error)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   	  sX    

&zDriverArrivedPickup.postN)r   r   r   r   r&   r&   r&   r'   r  	  s   r  c               @   s   e Zd Zdd ZdS )GenerateOTPNewc             O   sH  t d t d|j yd}|jjd}|jjd}|jjd}|sRtddd	S |sdtdd
d	S |svtddd	S tj|}g }xx|D ]n}	t |	d  |	d }
tjj|
dj	 }|r|dkrfd}dj
dd tdD }|dkrt|jjd|j }nt|jjd|j }t | t | t d| d | d  t|d| d | d d}t | |rtjj|
dj	 }|dkr|r||_|j  ntjj|
|d n&|r||_|j  ntjj|
|d |jdd|
d q|jdd |
d qW td||d!S  tk
rB } zt | tdd d	S d }~X nX d S )"Nz



zdata is  : Tr   r   request_typei  zUser not logged in)r   r   zData is Requiredzrequest_type is requiredr  )r_   Fr   c             S   s   g | ]}t jtjqS r&   )r   r   r   r   )r   r   r&   r&   r'   r   	  s    z'GenerateOTPNew.post.<locals>.<listcomp>r-   pickup+zOTP forisr   OTP)r  )r  
pickup_otp)r  delivery_otpr   r   )coder   
customeridi  zInternal Server Error)r   r>  otp)r   r   r   r   r  r  r   r   r   r   r   r   r"   sendercountrycodestripsenderphonerecipientcountrycoderecipientphoner   CustomerJobDeliveryExtraDetailsr  rA   r   r  r`   r   )r   r   r   r   Z
first_timer   r   r  all_data_responser  r  r   r  phoneres1Zcustomeralredycreatedr   r&   r&   r'   r   	  sl    





zGenerateOTPNew.postN)r   r   r   r   r&   r&   r&   r'   r  	  s   r  c               @   s   e Zd Zdd ZdS )GenerateOTPc             O   s  t d t d|j y`|jjd}|jjd}|jjd}|sNtdddS |s`tdd	dS |srtdd
dS tjj|dj }|rtdjdd t	dD }|dkrt
|jjd|j }	nt
|jjd|j }	t |	 t | t d| d | d  t|	d| d | d d}
t |
 |
rf|dkrFtjj||d ntjj||d tdd|dS tdddS W n4 tk
r } zt | tdddS d }~X nX d S )Nz



zdata is  : r   r  r  i  zUser not logged in)r   r   zcustomerjobid is requiredzrequest_type is required)r_   r   c             S   s   g | ]}t jtjqS r&   )r   r   r   r   )r   r   r&   r&   r'   r   5
  s    z$GenerateOTP.post.<locals>.<listcomp>r-   r  r  zOTP forr  r   r  )r  r  )r  r  r   r   )r   r   r  i  zInternal Server Error)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   &
  s@    
zGenerateOTP.postN)r   r   r   r   r&   r&   r&   r'   r  $
  s   r  c               @   s   e Zd Zdd ZdS )DriverGetWorkingSlotsc             O   s  t d t d|j y|jjd}|s4tdddS g }tjj|dj }|rtjj|j	dj }|rt
jj|d	j }|rtjj|d
j }	g }
|	rt|	}
tdd|
dS tdddS qtdddS ntdddS W n4 tk
r } zt | tdddS d }~X nX d S )Nz



aazdata is  : r   i  zUser not logged in)r   r   )r'  )r_   )r  )r   r   r   )r   r   r>  i  zInternal Server Error)r   r?  r   r   r   r   r   r   r)  r*  r   r   r   r   )r   r   r   r   r   r>  r-  r.  r   alltimeslotsr   r   r&   r&   r'   r   S
  s0    zDriverGetWorkingSlots.getN)r   r   r   r   r&   r&   r&   r'   r  Q
  s   r  c               @   s   e Zd Zdd ZdS )getworkingslotsDatesc             O   s>  t d t d|j y|jjd}|s4tdddS g }tjj|dj }|rtjj|j	dj }|rt
jj|d	j }|rtjj|d
}	g }
|	rx |	D ]}|
j|j|jd qW tdd|
dS tdddS qtdddS ntdddS ntdddS W n4 tk
r8 } zt | tdddS d }~X nX d S )Nz



aazdata is  : r   i  zUser not logged in)r   r   )r'  )r_   )r  )r   )Dater   r   r   )r   r   r>  z#No TimeSlots available for thi useri  zInternal Server Error)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   slotsr   r&   r&   r'   r   |
  s6    
zgetworkingslotsDates.getN)r   r   r   r   r&   r&   r&   r'   r  z
  s   r  c               @   s   e Zd Zdd ZdS )getworkingslotOfADatec             O   s   t d t d|j yb|jjd}|s4tdddS tjj|dj }g }|rft|}tdd	|d
S tdddS W n2 t	k
r } zt | tdddS d }~X nX d S )Nz



aazdata is  : slotidi  zSlot Id is Required)r   r   )r_   r   r   )r   r   r>  zNo slots availablei  zInternal Server Error)
r   r?  r   r   r   r   r   r   r   r   )r   r   r   r   r  r  r   r   r&   r&   r'   r   
  s    zgetworkingslotOfADate.getN)r   r   r   r   r&   r&   r&   r'   r  
  s   r  c               @   s   e Zd Zdd ZdS )DriverUpdateWorkingSlotsc             O   s  t d t d|j y^|jjd}|jjd}|sBtdddS |sTtdddS tjj|d	j }|rdt |j t	jj|jd
j }|rTt
jj|dj }|rDtjj j }	t d tjj|dj }
t d |
r$t d t | ||
_t d t |	 |	|
_t d |
j  t d ntjj||	|d tdddS tdddS ntdddS ntdddS W n4 tk
r } zt | tdddS d }~X nX d S )Nz



aazdata is  : r   slot_idsi  zUser not logged in)r   r   zPlease select slots)r'  )r_   )r  r?   )r   r*   rD  rF  rG  rH  )r   r  r  r   r   i  zInternal Server Error)r   r   r   r   r   r   r   r   r*  r)  r   r   r   r  DriverWorkingSlotsr  rA   r   r   )r   r   r   r   r   r  r-  r.  r   r   Zdriverworkingslots_objr   r&   r&   r'   r   
  sL    

zDriverUpdateWorkingSlots.postN)r   r   r   r   r&   r&   r&   r'   r  
  s   r  c               @   s   e Zd Zdd ZdS )!DriverUpdateWorkingSlotsExtraTestc             O   s  t d t d|j yj|jjd}|jjd}|sBtdddS |sTtdddS tjj|d	j }tj	|}|rpt |j
 tjj|j
d
j }|r`tjj|dj }|rPtjj|dj }	|	r@xf|D ]^}
t|
d }|
d dkr
d}t|	||}|dkr.q|
d dkrd}t|	||}|dkrqW tdddS tdddS ntdddS ntdddS ntdddS W n4 tk
r } zt | tdddS d }~X nX d S )Nz



aazdata is  : r   r  i  zUser not logged in)r   r   zPlease select slots)r'  )r_   )r  )r   r_   
new_statusenableTr*   disableFr   r   z!No slot available for this driveri  zInternal Server Error)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  sslot_idrZ   respor   r&   r&   r'   r   
  sN    



z&DriverUpdateWorkingSlotsExtraTest.postN)r   r   r   r   r&   r&   r&   r'   r  
  s   r  c               @   s   e Zd Zdd ZdS )"DriverUpdateWorkingSlotsExtraTest2c             O   s  t d t d|j yv|jjd}|jjd}|jjd}|sNtdddS |s`tdd	dS tjj|d
j }tj	|}|r|t |j
 tjj|j
dj }|rltjj|dj }	|	r\tjj|dj }
|
rLxf|D ]^}t|d }|d dkrd}t|
||}|dkr:q|d dkrd}t|
||}|dkrqW tdddS tdddS ntdddS ntdddS ntdddS W n4 tk
r } zt | tdddS d }~X nX d S )Nz



aazdata is  : r   r   slotDatai  zUser not logged in)r   r   zPlease select slots)r'  )r_   )r  Zsrnor  r  Tr*   r  Fr   r   z!No slot available for this driveri  zInternal Server Error)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  rZ   r  r   r&   r&   r'   r   !  sP    



z'DriverUpdateWorkingSlotsExtraTest2.postN)r   r   r   r   r&   r&   r&   r'   r    s   r  c               @   s   e Zd ZdZdd ZdS )GetDeliveryFailureReasonsz,This class is used to get all vehicle types c             O   s   yRt d g }tjjdd}|r<|jddi |jddi t | tdd|d	S  tk
r } zt | td
ddS d }~X nX d S )Nz&GetDeliveryFailureReasons API - in getT)r1  reasonz%Recipient is not at specified addresszAny Other Reasonr   r   )r   r   r>  i  zInternal Server Error)r   r   )r   	TimeSlotsr   r   r`   r   r   )r   r   r   r   r>  r  r   r&   r&   r'   r   X  s    

zGetDeliveryFailureReasons.getN)r   r   r   __doc__r   r&   r&   r&   r'   r  V  s   r  c               @   s   e Zd Zdd ZdS )DriverDeliveryFailedc          4   O   s  d;dd}t d t d t d|j |jjd}|sDtdd	d
S |jjd}|sbtddd
S |jjd}|stddd
S y"|jjd}|stddd
S |jjd}	|	stddd
S t d tjj||dj }
|
rt d d|
_	d|
_
|
j  yt d tjj }tjj|dj }|rDt d ||_|j  n0t d tjj|dj }|rttjj||d t d |	r>tjj|dj }tjj|dj }|rzt d t d |	j}|jd }t|d< }t|	j }tj|}d"jd#d$ td%D }ttjd& t|j t| }tj j!|r6n
tj"| |j|d' |  d&t|j t| d' | }t d( nt d |	j}|jd }t|d= }t|	j }tj|}d"jd)d$ td%D }ttjd& t|j t| }tj j!|rn
tj"| |j|d' |  d&t|j t| d' | }t d( tjj|dj }|r`t d* n.tjj|dj }t d+ tjj||||d, W n, t#k
r } zt | W Y d d }~X nX y2t$|
j%j&j'd-d.d/d0td1t(|  d2 |  W n, t#k
r } zt | W Y d d }~X nX y:t)jj|
j%j&j*|dd3d0td1t(|  d2 | d4d5 W n, t#k
r } zt | W Y d d }~X nX td6d7d
S tdd8d
S W n, t#k
r } ztd9d:d
S d }~X nX d S )>Nc:\c          
   S   s  yt | 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 t d tj|}	t d tj	j
|dj }
tj	j|d}djdd tdD }ttjd t|
j d t|
jj }tjj|r(n
tj| tj|}	|	j|d | d |  dt|
j d t|
jj d | d | }|S    dS d S )Nz

r?   z;base64,r*   r   rD  rE  rF  r)   rG  rH  rI  rJ  rK  rL  )r_   r   c             S   s   g | ]}t jtjtj qS r&   )r   r   r   r   r   )r   r   r&   r&   r'   r     s    zHDriverDeliveryFailed.post.<locals>.getI420FromBase64.<locals>.<listcomp>r   z/media/DeliveryFailedImg/r   r   )r   r   r"   rM  rN  r   r   r   r   r   r   r   r+  r   r   r   r   r   r_   r   r   r   r   r   rP  rA   )rQ  rR  rS  rT  rU  rV  r   rW  r   r   r   r/  r   r   r   r&   r&   r'   rX  m  sF    



(

.z4DriverDeliveryFailed.post.<locals>.getI420FromBase64z

z"DriverDeliveryFailed API - in postzdata is  : r   i  zUser not logged in.)r   r   r  zcustomerjobid is requireddeliveryfailurereasonz!deliveryfailurereason is requiredr  zdriverjobid is requiredr   zFailed Image Proof is requiredr?   )r_   r  r*   TrD  )r  rF  rG  )r_   )r  deliveryfailed_datetimerH  z0.6 not updatingz0.7 updatingr   r)   r   c             S   s   g | ]}t jtjtj qS r&   )r   r   r   r   r   )r   r   r&   r&   r'   r     s    z-DriverDeliveryFailed.post.<locals>.<listcomp>r   z/media/DeliveryFailedImg/z/delivery_failed.zin RES Image Failedc             S   s   g | ]}t jtjtj qS r&   )r   r   r   r   r   )r   r   r&   r&   r'   r     s    rI  rJ  )r  r  r  deliveryfailed_imager   r	  r
  zYour parcel (AWB-i'  z.) delivery is failed due to following reason: zParcel Delivery Failedr  )r  r  r  r  r  rZ   r   r   zNot a valid requesti  zInternal Server Error)r  r   r   )+r   r   r   r   r   r   r   r   r   r   deliveryfailedrA   r   r   r  r  r   r   CustomerJobDeliveryFailedr   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   rX  r   r  r  r  Zfailed_imager   r   r  r   Zcustomerjob_obj2Zcustomerjobdeliveryfailed_obj1r   r   r   r   r   r   Zcustomerjobdeliveryfailed_objr   r&   r&   r'   r   l  s    
/



 


 
2:zDriverDeliveryFailed.postN)r   r   r   r   r&   r&   r&   r'   r  j  s   r  c               @   s   e Zd Zdd ZdS )!PaymentHistoryForDeliveredParcelsc             C   s  t d|j yr|jjd}|s.tdddS g }tjj|dj }|rntjj|j	dj }|r\t
jj|dj }|rJg }tjj|d	d
}|r:t d x|D ]}	|	jjrttd|	jj d d}
nd}
|	jrd}nd}t t|	jj t |
 |j|	jj|	jj|	jjdtd|	jj  |	jj|	j|
|d qW td|ddS tdi ddS ntdi ddS ntdi ddS W n4 tk
r } zt | tdddS d}~X nX dS )z4 This API method is used to get profile data of userzdata is  : r   i  zUser not logged in)r   r   )r'  )r_   )r  T)r   r   
F   d   r   r?   ZPaidzNot PaidzAWB-i'  )
sendernamesenderpickupaddressrecipientdropoffaddress	awbnumberr  r  drivercommissionrZ   r   r   )r   r>  r   r   i  zInternal Server ErrorN)r   r?  r   r   r   r   r   r   r)  r*  r   r   r   pricer"   r  paidtodriverr`   r  pickupaddressdropoffaddressr_   r   )r   r   r   	chat_datar-  r.  r   r  r   r  r  rZ   r   r&   r&   r'   r     sR    
z%PaymentHistoryForDeliveredParcels.getN)r   r   r   r   r&   r&   r&   r'   r    s   r  c               @   s   e Zd Zdd ZdS )DriverDeliverToRecipientc             O   s  t d t d t d|j |jjd}|s:tdddS |jjd}|sXtdd	dS |jjd
}|svtdddS y$|jjd}|rntdddS W n* tk
r } zt | W Y d d }~X nX ytjj|dj	 }	|	j
jdkrt d |	jjr|	jr|	j}
|	j}|
| }dt_tjj|	jjdj	 }|rtjjtt|d d|j|jdtdt|	j  d d}tjj|	t||jt|jd d}|rt d nt d tdddS nt d W n4 tk
r  } zt | tdddS d }~X nX ytjj||dj	 }|rd|_|j  y^t j j! }t"jj|dj	 }|rb||_#|j  n(tjj|dj	 }	|	rt"jj|	|d  W n, tk
r } zt | W Y d d }~X nX y|jjd}|rrtjj|dj	 }	|j$}|j%d!}t|d8 }t&|j' }t(j)|}tt*j+d# t|	j }t,j-j.|r:n
t,j/| |j|d$ |  d#t|	j d$ | }|}nt d% W n, tk
r } zt | W Y d d }~X nX yt0|j1j2d&d'd(d) W n, tk
r } zt | W Y d d }~X nX y(t3jj|j1j4|j5j|jdd*d)d+d, W n, tk
rD } zt | W Y d d }~X nX yt0|j5j
j2dd'd(d- W n, tk
r } zt | W Y d d }~X nX y&t3jj|j5j
j4|j5jdd*d-d+d. W n, tk
r } zt | W Y d d }~X nX ypt|j5j6j7d/|j5j8 }t|j5j9j7d/|j5j: }t | t | t;|d0d1}t | t;|d2d1}t | W n, tk
r~ } zt | W Y d d }~X nX td3d4dS tdd5dS W n, tk
r } ztd6d7dS d }~X nX d S )9Nz

z&DriverDeliverToRecipient API - in postzdata is  : r   i  zUser not logged in.)r   r   r  zcustomerjobid is requiredr  zdriverjobid is requiredZproofofdeliveryzproofofdelivery is required)r_   r   zcustomer user*sk_test_P9sozPTZ5nZbhc3fOFCsjNqm00hYGCvJ7lr  gbpzPayment for parcel (AWB-i'  ))amountcurrencyr   carddescription)r  stripe_charge_responsestripe_charge_idstripe_amountzpayment received successfullyz/Customer didn't select card while placing orderzcompany userzPayment Server Error)r_   r  T)r  )r  r  r   r)   z/media/CustomerJobs/z/proofofdelivery.zno proofofdelivery imager   r	  r
  z&You have delivered parcel successfullyzParcel Deliveredr  )r  r  r  	fordriverr  r  rZ   z%Your parcel is delivered successfully)r  r  r  r  r  rZ   r  z&Your parcel is successfully delivered.r  z&You have successfully received parcel.r   r   zNot a valid requesti  zInternal Server Errorr   )<r   r   r   r   r   r   r   r   r   r   r   roleordercharge_from_cardr  specialbooking_chargestripeapi_key
StoredCardCharger   r#   floatstripe_customer_idstripe_card_idr"   r_   CustomerJobPaymentr  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  r  r   r   r   parcel_charger  total_amountstoredcard_objchargecustomerjobpayment_objr   r   r  r   r   r   r   r   Zproofofdelivery_filepathsender_phonerecipient_phoner  res2r&   r&   r'   r   X  s    
$





(&zDriverDeliverToRecipient.postN)r   r   r   r   r&   r&   r&   r'   r  V  s   r  c               @   s   e Zd Zdd ZdS )%DriverDeliverToRecipientTestExtraTestc       7      O   s  t d t d t d|j |jjd}|s:tdddS |jjd}|sXtdd	dS |jjd
}|svtdddS tj|}g }d}x|D ]}	t |	d  t |	d  |	d }
|	d }|	d }|	d }d}tjj|
dj	 }|j
}y(tjj||
dj	 }|jdkrd}W n8 tk
rJ } z|j|
|ddd W Y d d }~X nX yltjj|
dj	 }ttj}t d t|}t|}t|j}t|j}t d d}|r|r|r|rt d |d | }|d | }t |d | d | d |  tj|d | d | d | }t d  |j }t | t d! t d" d#}ytjjdd$j	 }|j}W n   d#}Y nX |d% d&krt d' d(}t|d) d d* d d+ d, | }t|| } t |  t d- || krt d. nytjj||d/j	 }!|!rF|!jd0krtdd1dS |!jd2kr*n|!jd3krhtdd4dS n"tjj|||dd5 tdd6dS W n4 tk
r } zt | tdd7dS d }~X nX nt d8 tdd9dS W n4 tk
r } zt | tdd7dS d }~X nX |dkrҐy^|d:kr|jjd;}"|"s(tdd<dS y`t d= |jjd:}#t d> yt d? t |#j W n, tk
r } zt | W Y d d }~X nX |#rztjj|
dj	 }|#j}$|$jd@}$t|$dn }%t|#j }&t j!|&}'ttj"dB t|j# }(t$j%j&|(rn
t$j'|( |'j(|(dC |%  dBt|j# dC |% }$t)jj|
dDj	 })|)rd||)_*|"|)_+|$|)_,|)j(  nt)jj|
||"|$dE ntddFdS W n4 tk
r } zt | tddGdS d }~X nX n|dHkrX|jjdH}*|*stddIdS t)jj|
dDj- })|)rX|)j.|*krJt)jj|
dDj	 })|)r8||)_*|)j(  nt)jj|
|dJ ntddKdS W n4 tk
r } zt | tdLdGdS d }~X nX y
tjj|
dj	 }|j/j0dMkrt dN |j1j2rz|j3r|j3}+|j4},|+|, }-ttj5t6_7t8jj|j1j2dj	 }.|.rt6j9jt:t|-dO dP|.j;|.j<dQtdRt:|j#  dS dT}/t=jj|t|/|/j#t|/j>dO dU}0|0rt dV nt dW tddWdS nt dX W n4 tk
r } zt | tddYdS d }~X nX ydtjj||
dj	 }|r"|dkrd|_?|j(  y^t@j@jA }1tBjj|
dDj	 }2|2r<|1|2_C|2j(  n(tjj|
dj	 }|rdtBjj||1dZ W n, tk
r } zt | W Y d d }~X nX nd|_?|j(  |dkrytD|jEjFd[d\d]d^ W n, tk
r } zt | W Y d d }~X nX nFytD|jEjFd[d\d]d_ W n, tk
	r: } zt | W Y d d }~X nX |dk	ry(tGjj|jEjH|jIj#|j#dd`d^dadb W n, tk
	r } zt | W Y d d }~X nX nVy(tGjj|jEjH|jIj#|j#dd`d_dadb W n, tk
	r } zt | W Y d d }~X nX |dk
rHytD|jIj/jFdMd\d]dc W n, tk

rD } zt | W Y d d }~X nX nHytD|jIj/jFdMd\d]dd W n, tk

r } zt | W Y d d }~X nX |dk
ry&tGjj|jIj/jH|jIj#dd`dcdade W n, tk

r } zt | W Y d d }~X nX nTy&tGjj|jIj/jH|jIj#dd`dddade W n, tk
rB } zt | W Y d d }~X nX |dkrypt|jIjJjKdf|jIjL }3t|jIjMjKdf|jIjN }4t |3 t |4 tO|3dgdh}5t |5 tO|4didh}6t |6 W n, tk
r } zt | W Y d d }~X nX |dkr|j|
|djdkd n|j|
|dldkd n|j|
|ddd W q tk
rp } z|j|
|dGdd W Y d d }~X qX qW |dkrtP| tdm|dS )oNz

z&DriverDeliverToRecipient API - in postzdata is  : r   i  zUser not logged in.)r   r   method_typezmethod_type is requiredr   zData is Requiredr   r  r  r  r  F)r_   )r_   r  TzDriver Job not Foundtrue)r  driveridr   r   z
location 1z
location 2z9https://maps.googleapis.com/maps/api/distancematrix/json?z
location 3,zorigins=z&destinations=z&key=z
location 4r  z
location 5g     @@)r  rZ   OKz
location 6gobyp\D?rowselementsdistancevaluez
location 7arrived)r  r   r?   z&Your request is in Process,Please waitr*   rD  z1you are not in radius,Admin Rejected your request)r  r   r  rZ   z&Your request send to admin,Please waitzlocation errornothingz(you are not in radius of parcel location	signaturer   zname is required000000000000000111111111111112222222222222r   r)   z/media/CustomerJobs/z/delivery_recipientsignature.)r  )r  delivery_proof_methoddelivery_toperson_namedelivery_toperson_signaturezsignature is requiredzInternal Server Errorr  zotp is required)r  r  zInvalid OTPi  r   zcustomer userr  r  zPayment for parcel (AWB-i'  r  )r  r  r   r  r  )r  r  r  r  zpayment received successfullyz/Customer didn't select card while placing orderzcompany userzPayment Server Error)r  r  r   r	  r
  z&You have delivered parcel successfullyzThis Parcel is DisabledzParcel Deliveredr  )r  r  r  r  r  r  rZ   z%Your parcel is delivered successfullyz4This Parcel is Disabled,Driver not found this parcel)r  r  r  r  r  rZ   r  z&Your parcel is successfully delivered.r  z&You have successfully received parcel.zParcel DeliverdfalsezThis Parcel is disabledr   r   )Qr   r   r   r   r  r  r   r   r   r   r   r   parcel_disabledr   r`   r"   r   GOOGLE_API_KEYrecipientlatituderecipientlongituderequestsRadiusControlr  r  RadiusPermissionrZ   r   r   r   r   r   r   r   r   r   r_   r   r   r   r   rA   r  r  r  r  lastr  r   r  r  r  r  r  
STRIPE_KEYr  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   slotStatusonJobCompletenew)7r   r   r   r   r   r	  r   r  ZsameIdParcelCopyr  r  r  r  r  comment_for_parcelr   r   r   r  driverlatitude_valdriverlongitude_valparcellatitude_valparcellongitude_valurldrivercoordinates_valparcelcoordinates_valrxradiusradiusObjectmultiplicationfactordistanceinmilesdesti_radiusradiusPermisssionname_valr   r   r   r   r   r   #customerjobdeliveryextradetails_objotp_valr   r  r  r  r  r  r   r  r  r  r  r  r&   r&   r'   r     s   



 "

$










$





((

&&

 
z*DriverDeliverToRecipientTestExtraTest.postN)r   r   r   r   r&   r&   r&   r'   r    s   r  c             C   sr  t jj| d}d}d}d}d}d}xD|D ]:}tjj|dj }|r*td d}|jj}t|j t|j	 |j	}	|	j
dd }
|	j
dd	 }t|
}
t|}|
d
 | }	t|
 t| t|	 t|	d d }||k r|}td| t|j |j}|j
dd }
|j
dd	 }t|
}
t|}|
d
 | }t|
 t| t| t|d d }||kr*|}q*W d}d}td t jj| dj }t| td |j}td tjj|dj }t| |r>td |j}td| tjj|d}td| xB|D ]:}td |j|kr td|j d}|j}td| q W |dkrntd |rntd t||d	 | d S )N)r   Tr>   r   F)r   zwe are in driver jobr   r)   r   r   r   zone 1zone 2zone 3zone 4zone 5)r   zone 6zone 7zone 8zone 9zone 10)r   r   r   r   r   r   r   r_   r   r   r   r(   r#   r   r   r   makeslotAvailablenew)r   r   r   r   r   r   driverExistr   r   r   r   r   r   r   r   	slotsFindidofslottablespickupdateCuystomerparcelpickupdater   r   dr&   r&   r'   r%  f  s    







r%  c             C   s  yv| d } t jj|dj }|rv| dkr:|dkr:d|_| dkrP|dkrPd|_| dkrf|dkrfd|_| dkr||dkr|d|_| dkr|dkrd|_| dkr|dkrd|_	| d	kr|d	krd|_
| d
kr|d
krd|_| dkr|dkrd|_| dko|dkrd|_| dkr|dkrd|_| dkr6|dkr6d|_| dkrP|dkrPd|_| dkrj|dkrjd|_| dkr|dkrd|_| dkr|dkrd|_| dkr|dkrd|_| dkr|dkrd|_| dkr|dkrd|_| dkr|dkrd|_| dkr |dkr d|_| dkr:|dkr:d|_| dkrT|dkrTd|_| dkrn|dkrnd|_|j  dS  tk
r } zt| dS d }~X nX d S )Nr)   )r_   Tr   r+   r,   r-   r   r.   r/   r0   r1   r2   r   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r   r   )r   r   r   r   r@   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rA   r   r   )r   r   driveridforslotsr   r   r&   r&   r'   r9    sr    r9  c               @   s   e Zd Zdd ZdS )DriverDeliverToRecipientTestc              O   sH  t d t d t d|j |jjd}|s:tdddS |jjd}|sXtdd	dS |jjd
}|svtdddS |jjd}|stdddS y\|dkrZ|jjd}|stdddS y`t d |jjd}	t d yt d t |	j W n, tk
r" }
 zt |
 W Y d d }
~
X nX |	rtjj	|dj
 }|	j}|jd}t|dB }t|	j }tj|}ttjd t|j }tjj|rn
tj| |j|d |  dt|j d | }tjj	|dj
 }|r||_||_||_|j  ntjj||||d ntdddS W n4 tk
rV }
 zt |
 tdddS d }
~
X nX n|dkr|jjd}|stdddS tjj	|dj }|r|j|krtjj	|dj
 }|r||_|j  ntjj||d ntdd dS W n4 tk
r& }
 zt |
 td!ddS d }
~
X nX y
tjj	|dj
 }|j j!d"kr*t d# |j"j#r|j$r(|j$}|j%}|| }ttj&t'_(t)jj	|j"j#dj
 }|r(t'j*jt+t,|d$ d%|j-|j.d&td't+|j  d( d)}t/jj|t||jt,|j0d$ d*}|r(t d+ nt d, tdd,dS nt d- W n4 tk
rh }
 zt |
 tdd.dS d }
~
X nX yt1jj	||d/j
 }|rd0|_2|j  y^t3j3j4 }t5jj	|dj
 }|r||_6|j  n(tjj	|dj
 }|rt5jj||d1 W n, tk
r  }
 zt |
 W Y d d }
~
X nX yt7|j8j9d2d3d4d5 W n, tk
rf }
 zt |
 W Y d d }
~
X nX y(t:jj|j8j;|j<j|jd0d6d5d7d8 W n, tk
r }
 zt |
 W Y d d }
~
X nX yt7|j<j j9d"d3d4d9 W n, tk
r }
 zt |
 W Y d d }
~
X nX y&t:jj|j<j j;|j<jd0d6d9d7d: W n, tk
rX }
 zt |
 W Y d d }
~
X nX ypt|j<j=j>d;|j<j? }t|j<j@j>d;|j<jA }t | t | tB|d<d=}t | tB|d>d=}t | W n, tk
r }
 zt |
 W Y d d }
~
X nX td?d@dS tddAdS W n, tk
rB }
 ztd!ddS d }
~
X nX d S )CNz

z&DriverDeliverToRecipient API - in postzdata is  : r   i  zUser not logged in.)r   r   r  zcustomerjobid is requiredr  zdriverjobid is requiredr	  zmethod_type is requiredr  r   zname is requiredr  r  r  )r_   r   r)   z/media/CustomerJobs/z/delivery_recipientsignature.)r  )r  r  r  r  zsignature is requiredzInternal Server Errorr  zotp is required)r  r  zInvalid OTPi  r   zcustomer userr  r  zPayment for parcel (AWB-i'  r  )r  r  r   r  r  )r  r  r  r  zpayment received successfullyz/Customer didn't select card while placing orderzcompany userzPayment Server Error)r_   r  T)r  r  r   r	  r
  z&You have delivered parcel successfullyzParcel Deliveredr  )r  r  r  r  r  r  rZ   z%Your parcel is delivered successfully)r  r  r  r  r  rZ   r  z&Your parcel is successfully delivered.r  z&You have successfully received parcel.r   r   zNot a valid requestr   )Cr   r   r   r   r   r   r   r   r   r   r   r   r"   r   r   r   r   r   r   r_   r   r   r   r   rA   r  r  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   r   r   r   r   r   r   r   r7  r8  r   r  r  r  r  r  r   r   r  r  r  r  r  r&   r&   r'   r     s   







$


(&z!DriverDeliverToRecipientTest.postN)r   r   r   r   r&   r&   r&   r'   rA    s   rA  c               @   s   e Zd Zdd ZdS )SendMessageToAdminc             O   s  t d t d y:|jjd}|jjd}|jjd}|jjd}|jjd}|dkrd|jjd}|dkr|jd	 }	|	rt d
 nt d d}
|o|
o|r@|dkrtjj||
||d}|rt d |dkr@djdd tdD }t | t	 }|j
|	j|	}|j|}d| }t | tjj||
||d}|r@t d tdddS  tk
r } zt | tdddS d }~X nX d S )Nz



zChat  - in post senderr   messagemessageexistattachmentexistr  r_  zattachment existszno attachmentr)   )r   admin_idrD  rC  zmessage saved in databaser   c             S   s   g | ]}t jtjtj qS r&   )r   r   r   r   r   )r   r   r&   r&   r'   r     s    z+SendMessageToAdmin.post.<locals>.<listcomp>r/   z/media/)r   rG  filesrC  zattachment saved in databaser   r   )r   r   i  zInternal Server Error)r   r   r   r   Chatr   r   r   r   FileSystemStoragerA   r   r+  r   r   )r   r   r   r   rC  r   rD  rE  rF  
attachmentrG  chat_objr   fsr   r   r&   r&   r'   r     sH    

	

zSendMessageToAdmin.postN)r   r   r   r   r&   r&   r&   r'   rB    s   rB  c               @   s   e Zd Zdd ZdS )GetChatsc             C   s  t d|j y8|jjd}|s.tdddS g }tjj|dj }|r4tjj|j	dj }|r"t
jj|dj j}|rg }tjj|d	jd
}|r xb|D ]Z}|jrttj|jj }	nd}	|j|jj|jj|jj|jj|j|j|	|jjdd qW td|ddS tdi ddS ntdi ddS ntdi ddS W n4 tk
rz }
 zt |
 tdddS d}
~
X nX dS )z4 This API method is used to get profile data of userzdata is  : r   i  zUser not logged in)r   r   )r'  )r_   )r  )r   r   r   z%d/%m/%Y %I:%M:%S %p)ZadminidZ	adminnamer  
drivernamerD  rC  rK  r  r   r   )r   r>  r   i  zInternal Server ErrorN)r   r?  r   r   r   r   r   r   r)  r*  r   r_   rI  order_byrH  r"   r   WEB_BASE_URLr   r`   adminr   rD  rC  r   r   r   )r   r   r   r  r-  r.  r  rL  ZchatrK  r   r&   r&   r'   r     sF    
zGetChats.getN)r   r   r   r   r&   r&   r&   r'   rN    s   rN  c               @   s   e Zd Zdd ZdS )DriverUpdateCoordinatesc             O   s~  t d t d|j y.|jjd}|jjd}|jjd}|sNtdddS |s`tdd	dS |srtdd
dS tjj|dj }|r4t |j t	jj|jdj }|r$t
jj|dj }	|	rtjj|	dj }
|
r||
_||
_|
j  ntjj||	||d tdddS tdddS ntdddS ntdddS W n4 tk
rx } zt | tdddS d }~X nX d S )Nz



aazdata is  : r   r  r  i  zUser not logged in)r   r   zPlease enter latitudezPlease enter longitude)r'  )r_   )r  )r   )r  r   r  r  r   r   i  zInternal Server Error)r   r   r   r   r   r   r   r   r*  r)  r   DriverCoordinatesr  r  rA   r   r   )r   r   r   r   r   r  r  r-  r.  r   drivercoordinates_objr   r&   r&   r'   r     s@    

zDriverUpdateCoordinates.postN)r   r   r   r   r&   r&   r&   r'   rS    s   rS  c               @   s   e Zd Zdd ZdS )DriverChangePasswordc             O   s  t d t d|j y6|jjd}|jjd}|jjd}|sNtdddS |s`tdd	dS |srtdd
dS tjj|dj }|rJt |j t	jj|jd}|j
|r4t d t||_|j  tjj|dj }	|	r&yt|	jdddd W n, tk
r$ }
 zt |
 W Y d d }
~
X nX tdddS t d tdddS W n4 tk
r }
 zt |
 tdddS d }
~
X nX d S )Nz



aazdata is  : r   oldpasswordnewpasswordi  zUser not logged in)r   r   zPlease enter old passwordzPlease enter new password)r'  )r_   zcorrect password)r  r   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   passwordrA   r   r   r  r   )r   r   r   r   r   oldpassword_valnewpassword_valr-  r.  r   r   r&   r&   r'   r   I  s@    

zDriverChangePassword.postN)r   r   r   r   r&   r&   r&   r'   rV  G  s   rV  c               @   s   e Zd Zdd ZdS )!DriverGetUnreadNotificationsCountc       	      O   s   t d y|jjd}|s(tdddS tjj|dj }|r~t|j	\}}|dkr^t | n|dkrnt | td	|dd
S tdddS W n2 t
k
r } zt | tdddS d}~X nX dS )z<This function shows the content on customer dashboard screenz+DriverGetUnreadNotificationsCount - in get r   i  zUser not logged in)r   r   )r'  r   r   r   )r   unread_notifications_countr   i  zInternal Server ErrorN)r   r?  r   r   r   r   r   r   r   r*  r   )	r   r   r   r   r   r-  resultr  r   r&   r&   r'   r   s  s"    
z%DriverGetUnreadNotificationsCount.getN)r   r   r   r   r&   r&   r&   r'   r^  q  s   r^  c               @   s   e Zd Zdd ZdS )DriverNotificationsc             O   s`  t d y|jjd}|s*tdddS tjj|dj }|rtjj|j	dj }|rg }t
jj|dd	jd
}|rxh|D ]`}	tjj|	jdj }
d}d}|
r|
j}|
jrd}|j|	j|	j|	j|	j|	j|	j|	j||d	 qW td|ddS tdg ddS ntdddS ntdddS W n4 tk
rZ } zt | tdddS d}~X nX dS )z<This function shows the content on customer dashboard screenzDriverNotifications - in get r   i  zUser not logged in)r   r   )r'  )r_   F)r  deletedz-id)r  r   T)	r_   r  r  r  r  rZ   r  r  r   r   r   )r   r>  r   i  zInternal Server ErrorN)r   r?  r   r   r   r   r   r   r)  r*  r  rP  r   r  r_   r   r`   r  r  r  rZ   r  r   )r   r   r   r   r   r-  r.  notifications_dataall_notificationsnotificationr   r   r  r   r&   r&   r'   r     sJ    
zDriverNotifications.getN)r   r   r   r   r&   r&   r&   r'   ra    s   ra  c               @   s   e Zd Zdd ZdS )DriverCustomerJobDetailc       )   :   C   s  t d|j y|jjd}|jjd}|jjd}|sFtdddS |sXtdddS |sjtdd	dS i }tjj|d
j }|rtjj|j	dj }|rt
jj|dj }|rtjj|dj }	d}
|	rBt d |	jdkrd}
|	jdkrd}
|	jdkrd}
|	jdkrd}
|	jdkr"d}
|	jdkr2d}
|	jdkrBd}
d}d}|	rt d |	jdkr~|	jdkr~t d d}nR|	jdkr|	jdkrt d d}d}n(|	jdkr|	jdkrt d d}d}tjj|dj }|r|jsd}n|j}|js
d}n|j}|jsd}nttj|jj }|jrLttj|jj }nd}|jjdkrdd}n|jjdkrxd}nd}d.\}}}tjj|j ddj }|rd}|j!}|j"}t#jj|d j }d/\}}}}|r|j$}|j%}|j&}|j'}d}d}t(jj|	|d!j }|rd}|j)j}d0\}} }!}"d1\}#}$}%}&t*jj|d j }'|'r|'j+d"krx|'j+}|'j,} ttj|'j-j }"n0|'j+d#kr|'j+}|j.} |jd$ |j/ }!n|'j+}|'j0d"kr|'j0}#|'j1}$ttj|'j2j }&n0|'j0d#kr|'j0}#|j3}$|jd$ |j4 }%n|'j0}#|j5d%td&|j   |j3||j4|j6|j7|j8|j9|j.||j/|j:|j;|j<|j=|j>|j?|j@|jAjtB|jCd|||jD|jE|jF|jG|jH|||jI|jJ|||
||||jK|jL|jM||| |!|"|#|$|%|&|d'2 td(|d)d*S  tNk
r }( zt |( td+d,dS d-}(~(X nX d-S )2z4 This API method is used to get profile data of userzdata is  : r   r  r  i  zUser not logged in)r   r   zCustomerJob id is requiredzDriverJob id is required)r'  )r_   )r  r   zfirst -1Tr)   r   r+   r,   r-   r   c   Fifzif 2elifr   zSingle-Dropz
Multi-Dropr   )r  	ratingfor)r  )r   r   r  r  r   zAWB-i'  )2r  r  r  r  r  
sendercityr   noofparcelsrecipientnamer  r  r  r   lengthwidthheightweight
parceltyper5  fareparcelpdf_linkqrcodespecialbookingsenderlatitudesenderlongituder  r  showscanbuttonshowhandovertorecipientbuttonpickupspecialnotedropoffspecialnotedelivery_safe_statussafe_image_proofdriver_job_statusratingfeedbackfeedbackgivencrationDatedeliveryDurationrZ   	ordertyper  r  delivery_toperson_phoner  pickup_proof_methodpickup_fromperson_namepickup_fromperson_phonepickup_fromperson_signaturer  r   r   )r   r>  r   i  zInternal Server ErrorN)r   r   F)r   r   r   r   )r   r   r   r   )r   r   r   r   )Or   r?  r   r   r   r   r   r   r)  r*  r   r   r#  r  parcel_picked_by_driverr  r   r   r  r   r  r  ru  r"   r   r@  r   	parcelpdfrQ  r  r  
UserRatingr_   r  noter  payment_datetimepickup_datetimer  r  r   r   r  r  r  r  rm  r  r  r  r  r  r  r,  r  rk  r   rl  r  r   rn  ro  rp  rq  rr  r5  r  r  rv  rw  rx  r  r  r{  r|  creation_datedeliverydurationrZ   r   ))r   r   r   r  r  customerjob_datar-  r.  r   r   r  ry  rz  r   r  r  ru  rt  r  r  r  r  userrating_objr  r  r  r  r  r}  r~  safepalceImager  r  r  r  r  r  r  r  r7  r   r&   r&   r'   r     sL   




zDriverCustomerJobDetail.getN)r   r   r   r   r&   r&   r&   r'   rf    s   rf  c               @   s   e Zd Zdd ZdS )(DriverCustomerJobDetailExtraTestViewDatec       C   Z   C   s  t d|j y|jjd}|s.tdddS |jjd}|sLtdddS g }g }tjj|dj }|rtjj|j	d	j }|r~t d
 t
jj|dj }|rlt d tjjddj }	|	r|	j}
nd}
tjj|d}|r t d t t| d}tjj }x|D ]}t d| t d|jj t|jj}|jdd }|jdd }|jdd }|jdd}|jdd}|jdd}t | t | t | |d | d | }tjj|d}t d|j  t d| tjdd}|| }t |j  d}|j |j krd}t d n4|j |j kr4d }n|j |j krLd!}nd"}d}d}||krt|t|jj }n6||kr|t|jj }n||kr|t|jj }d}d}d}d}d}d}|r@t d# |jd$krd}|jd$krd}|jd$kr d%}|jd$krd&}|jd$kr d'}|j d$kr0d(}|j!d$kr@d)}t d* |jr|jj"s`d} n|jj"} |jj#sxd}!n|jj#}!|jj$sd}"ntt%j&|jj$j' }"|jj(rtt%j)|jj(j' }#nd}#|jj*j+dkrd+}$n|jj*j+dkrd,}$nd}$dC\}%}&}'t,jj|jj-d-d.j }(|(r0d$}'|(j.}%|(j/}&d})d}*t0jj||jd/j }+|+rjd$})tt%j&|+j1j' }*t d0 t2jj|jd1j },dD\}-}.}/}0|,r|,j3}-|,j4}.|,j5}/|,j6}0ydE\}1}2}3}4|jj7dkrt8jj|jj7d2}5x|5D ]}6t9jj|6d1j }7|7r|7j:d3krB|7j:}1|7j;}2ytt%j&|7j<j' }4W n   d}4Y nX nL|7j:d4kr|7j:}1|jj=}2y|jj"d |jj> }3W n   d}3Y nX n|7j:}1qW W n, t?k
r }8 zt |8 W Y d5d5}8~8X nX dF\}9}:};}<dG\}=}>}?}@t9jj|jd1j }A|Ar|Aj@d3kr8|Aj@}9|AjA}:ytt%j&|AjBj' }<W n   d}<Y nX nL|Aj@d4kr~|Aj@}9|jjC}:y|jj#d |jjD };W n   d};Y nX n|Aj@}9|Aj:d3kr|Aj:}=|Aj;}>ytt%j&|Aj<j' }@W n   d}@Y nX nL|Aj:d4kr|Aj:}=|jj=}>y|jj"d |jj> }?W n   d}?Y nX n|Aj:}=t d6 |jEd7td8|jj-  |jj=| |jj>|jjF|jjG|jjH|jj|jjC|!|jjD|jjI|jjJ|jjK|jjL|jjM|jjN|jjO|jjPj'tQ|jjRd|#|"|jjS|)|*||jjT|jjU|jjV|jjW|||jjX|jjY|%|&|'|jjZ|jj[|jj\|$|9|:|;|<|1|2|3|4|/|j-||||d97 qW x&|D ]}B|Bd |kr&|jE|B q&W t d: t | td;|||
d<d=S td;g d<d>S ntdg dd>S ntd?g d@d>S W n4 t?k
r }8 zt |8 tdAdBdS d5}8~8X nX d5S )Hz4 This API method is used to get profile data of userzdata is  : r   i  zUser not logged in)r   r   
dateStatuszdateStatus is required)r'  )r_   r?   )r  r*   F)	isdeletedr   )r   rD  r   z
Today DatezJob Pickup Dater   r)   r   r   z%d %b %YzDate:z
Date-time:)r  NoneTodayMatchTommorowOthersPastzfirst -1Tr+   r,   r-   r   rg  zfirst -2zSingle-Dropz
Multi-Dropr   )r  rj  )r   r   zfirst -3)r  )r   r  r  Nzfirst-4zAWB-i'  )7r  r  r  r  r  rk  r   rl  rm  r  r  r  r   rn  ro  rp  rq  rr  r5  rs  rt  ru  rv  r}  r~  r  rw  rx  r  r  ry  rz  r{  r|  r  r  r  r  r  rZ   r  r  r  r  r  r  r  r  r  r  r  driverOnWayButttondriverArrivedButtondriverPickedUpParcelButtonr  zfirst-5r   r   )r   zTotal Parcel To Be Deliverdr>  support_phoner   )r   r>  r   i  zUser not logged in.i  zInternal Server Error)r   r   F)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   SupportDetailr  r   lenr   r  r   r   r"   r   r!   r  r  r
   r#   rl  r#  r  r  r  r   r   r  r  r  ru  r   r@  r   r  rQ  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  rm  r  r`   r  rk  r   r  r   rn  ro  rp  rq  rr  r5  r  r  rv  rw  rx  r  r  r{  r|  r  r  rZ   )Cr   r   r   r  alldriverjobs_datanewDataAfterFilterr-  r.  r   supportdetail_objr  r   totalParcelToBeDeliverdr  r  date_time_strr   secondthirdnewDatedate_time_objdeltanextDate
DateStatusdriverOnWaydriverArrivedry  rz  r  r  r  r  r  r  ru  rt  r  r  r  r  r  r}  r~  r  r  r  r  r  r  pickup_proof_method_newpickup_fromperson_name_newpickup_fromperson_phone_newpickup_fromperson_signature_newall_customer_jobalcustomer_deatils_allr   r  r  r  r  r  r  r  r  r7  viewr&   r&   r'   r     s   













z,DriverCustomerJobDetailExtraTestViewDate.getN)r   r   r   r   r&   r&   r&   r'   r    s   r  c               @   s   e Zd Zdd ZdS ))DriverCustomerJobDetailExtraTestViewDate2c       G   \   C   s4	  t d|j y|jjd}|s.tdddS |jjd}|sLtdddS g }g }tjj|dj }|rtjj|j	d	j }|rt d
 t
jj|dj }|rt d tjjddj }	|	r|	j}
nd}
tjj|d}|r*t d t t| d}tjj }x |D ]}t d| t d|jj t|jj}|jdd }|jdd }|jdd }|jdd}|jdd}|jdd}t | t | t | |d | d | }tjj|d}t d|j  t d| tjdd}|| }t |j  d}|j |j krd}t d n4|j |j kr4d }n|j |j krLd!}nd"}d}d}||krt|t|jj }n6||kr|t|jj }n||kr|t|jj }d}d}d}d}d}d}|r@t d# |jd$krd}|jd$krd}|jd$kr d%}|jd$krd&}|jd$kr d'}|j d$kr0d(}|j!d$kr@d)}t d* |jr|jj"s`d} n|jj"} |jj#sxd}!n|jj#}!|jj$sd}"ntt%j&|jj$j' }"|jj(rtt%j)|jj(j' }#nd}#|jj*j+dkrd+}$n|jj*j+dkrd,}$nd}$dG\}%}&}'t,jj|jj-d-d.j }(|(r0d$}'|(j.}%|(j/}&d})d}*t0jj||jd/j }+|+rjd$})tt%j&|+j1j' }*t d0 t2jj|jd1j },dH\}-}.}/}0|,r|,j3}-|,j4}.|,j5}/|,j6}0ydI\}1}2}3}4|jj7dkrt8jj|jj7d2}5x|5D ]}6t9jj|6d1j }7|7r|7j:d3krB|7j:}1|7j;}2ytt%j&|7j<j' }4W n   d}4Y nX nL|7j:d4kr|7j:}1|jj=}2y|jj"d |jj> }3W n   d}3Y nX n|7j:}1qW W n, t?k
r }8 zt |8 W Y d5d5}8~8X nX dJ\}9}:};}<dK\}=}>}?}@t9jj|jd1j }A|Ar|Aj@d3kr8|Aj@}9|AjA}:ytt%j&|AjBj' }<W n   d}<Y nX nL|Aj@d4kr~|Aj@}9|jjC}:y|jj#d |jjD };W n   d};Y nX n|Aj@}9|Aj:d3kr|Aj:}=|Aj;}>ytt%j&|Aj<j' }@W n   d}@Y nX nL|Aj:d4kr|Aj:}=|jj=}>y|jj"d |jj> }?W n   d}?Y nX n|Aj:}=t d6 |jEd7td8|jj-  |jj=| |jj>|jjF|jjG|jjH|jj|jjC|!|jjD|jjI|jjJ|jjK|jjL|jjM|jjN|jjO|jjPj'tQ|jjRd|#|"|jjS|)|*||jjT|jjU|jjV|jjW|||jjX|jjY|%|&|'|jjZ|jj[|jj\|$|9|:|;|<|1|2|3|4|/|j-|||||jj]|j^d99 qW x&|D ]}B|Bd |kr0|jE|B q0W t d: t | g }Cx2|D ]*}Dt_|Dd;d< dd=}E|CjE|E t |E qlW t_|Ct`d}Ft d>|F td?||F|
d@dAS td?g d@dBS ntdg ddBS ntdCg dDdBS W n4 t?k
	r. }8 zt |8 tdEdFdS d5}8~8X nX d5S )Lz4 This API method is used to get profile data of userzdata is  : r   i  zUser not logged in)r   r   r  zdateStatus is required)r'  )r_   r?   )r  r*   F)r  r   )r   rD  r   z
Today DatezJob Pickup Dater   r)   r   r   z%d %b %YzDate:z
Date-time:)r  r  r  r  r  r  r  zfirst -1Tr+   r,   r-   r   rg  zfirst -2zSingle-Dropz
Multi-Dropr   )r  rj  )r   r   zfirst -3)r  )r   r  r  Nzfirst-4zAWB-i'  )9r  r  r  r  r  rk  r   rl  rm  r  r  r  r   rn  ro  rp  rq  rr  r5  rs  rt  ru  rv  r}  r~  r  rw  rx  r  r  ry  rz  r{  r|  r  r  r  r  r  rZ   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  priorityBaseIDForParcelpriorityBaseIDJobszfirst-5c             S   s   | d S )Nr  r&   )jr&   r&   r'   <lambda>*  s    z?DriverCustomerJobDetailExtraTestViewDate2.get.<locals>.<lambda>)r'  reversezSorted list:r   r   )r   zTotal Parcel To Be Deliverdr>  r  r   )r   r>  r   i  zUser not logged in.i  zInternal Server Error)r   r   F)r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )ar   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#   rl  r#  r  r  r  r   r   r  r  r  ru  r   r@  r   r  rQ  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  rm  r  r`   r  rk  r   r  r   rn  ro  rp  rq  rr  r5  r  r  rv  rw  rx  r  r  r{  r|  r  r  rZ   r  r  sortedtake_second)Gr   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  ry  rz  r  r  r  r  r  r  ru  rt  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  	newsortedi
sorted_objoutstandingdriverjobs_datanewr&   r&   r'   r     s   
















z-DriverCustomerJobDetailExtraTestViewDate2.getN)r   r   r   r   r&   r&   r&   r'   r    s   r  c               @   s   e Zd Zdd ZdS ) DriverCustomerJobDetailExtraTestc       6   Y   C   s  t d|j y|jjd}|s.tdddS g }tjj|dj }|rtjj|j	dj }|rt d t
jj|d	j }|rt d
 tjjddj }|r|j}nd}tjj|d}	|	rrt d t t|	 d}
x|	D ]}d}d}|
t|jj }
d}d}d}d}d}d}|rt d |jdkr6d}|jdkrFd}|jdkrVd}|jdkrfd}|jdkrvd}|jdkrd}|jdkrd}t d |jrh|jjsd}n|jj}|jjsd}n|jj}|jjsd}nttj|jjj }|jj rttj!|jj j }nd}|jj"j#dkr4d}n|jj"j#dkrJd}nd}d4\}}}t$jj|jj%ddj }|rd}|j&}|j'}d}d}t(jj||jdj }|rd}ttj|j)j }t d  t*jj|jd!j } d5\}!}"}#}$| r| j+}!| j,}"| j-}#| j.}$yd6\}%}&}'}(|jj/dkrt0jj|jj/d"})x|)D ]}*t1jj|*d!j }+|+r:|+j2d#kr|+j2}%|+j3}&yttj|+j4j }(W n   d}(Y nX nL|+j2d$kr|+j2}%|jj5}&y|jjd% |jj6 }'W n   d}'Y nX n|+j2}%q:W W n, t7k
r }, zt |, W Y d&d&},~,X nX d7\}-}.}/}0d8\}1}2}3}4t1jj|jd!j }5|5rh|5j8d#kr|5j8}-|5j9}.yttj|5j:j }0W n   d}0Y nX nL|5j8d$kr|5j8}-|jj;}.y|jjd% |jj< }/W n   d}/Y nX n|5j8}-|5j2d#kr|5j2}1|5j3}2yttj|5j4j }4W n   d}4Y nX nL|5j2d$krb|5j2}1|jj5}2y|jjd% |jj6 }3W n   d}3Y nX n|5j2}1t d' |j=d(td)|jj%  |jj5||jj6|jj>|jj?|jj@|jj|jj;||jj<|jjA|jjB|jjC|jjD|jjE|jjF|jjG|jjHjtI|jjJd|||jjK||||jjL|jjM|jjN|jjO|||jjP|jjQ||||jjR|jjS|jjT||-|.|/|0|%|&|'|(|#|j%|||d*6 qW t d+ t | td,|
||d-d.S td,g d-d/S ntdg dd/S ntd0g d1d/S W n4 t7k
r  }, zt |, td2d3dS d&},~,X nX d&S )9z4 This API method is used to get profile data of userzdata is  : r   i  zUser not logged in)r   r   )r'  )r_   r?   )r  r*   F)r  r   )r   rD  r   zfirst -1Tr)   r   r+   r,   r-   r   rg  zfirst -2zSingle-Dropz
Multi-Dropr   )r  rj  )r   r   zfirst -3)r  )r   r  r  r   Nzfirst-4zAWB-i'  )6r  r  r  r  r  rk  r   rl  rm  r  r  r  r   rn  ro  rp  rq  rr  r5  rs  rt  ru  rv  r}  r~  r  rw  rx  r  r  ry  rz  r{  r|  r  r  r  r  r  rZ   r  r  r  r  r  r  r  r  r  r  r  r  r  r  zfirst-5r   r   )r   zTotal Parcel To Be Deliverdr>  r  r   )r   r>  r   i  zUser not logged in.i  zInternal Server Error)r   r   F)r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )Ur   r?  r   r   r   r   r   r   r)  r*  r   r  r  r   r  r#   r   rl  r#  r  r  r  r   r   r  r  r  ru  r"   r   r@  r   r  rQ  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  rm  r  r`   r  rk  r   r  r   rn  ro  rp  rq  rr  r5  r  r  rv  rw  rx  r  r  r{  r|  r  r  rZ   )6r   r   r   r  r-  r.  r   r  r  r   r  r  r  r  ry  rz  r  r  r  r  r  r  ru  rt  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   ;  s   





z$DriverCustomerJobDetailExtraTest.getN)r   r   r   r   r&   r&   r&   r'   r  9  s   r  c               @   s   e Zd Zdd ZdS )DriverPickupVerifyParcelc          P   O   s  t d t d t d|j |jjd}|s:tdddS |jjd}|sXtdd	dS y8|jjd
}|sxtdddS ||krtdddS W n* tk
r } zt | W Y d d }~X nX y|jjd}|stdddS tjj||dj	 }	|	rd|	_
|	j  y^tjj }
tjj|dj	 }|r:|
|_|j  n(tjj|dj	 }|rbtjj||
d W n, tk
r } zt | W Y d d }~X nX yt|	jjdddd W n, tk
r } zt | W Y d d }~X nX yt|	jjjdddd W n, tk
r } zt | W Y d d }~X nX y&tjj|	jjj|	jjddddd W n, tk
rr } zt | W Y d d }~X nX tdddS tdddS W n, tk
r } ztd d!dS d }~X nX d S )"Nz

z&DriverPickupVerifyParcel API - in postzdata is  : r   i  zUser not logged in.)r   r   r  zcustomerjobid is requiredZselectedcustomerjobidz!selectedcustomerjobid is requiredz0This QR Code is not associated with this record.r  zdriverjobid is required)r_   r  T)r  )r_   )r  r  r   r	  r
  z&You have picked up parcel successfullyr   z%Your parcel is picked up successfullyzParcel Pickedr  )r  r  r  r  r  rZ   r   r   zNot a valid requesti  zInternal Server Error)r   r   r   r   Responser   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  Zselectedcustomerjobid_valr   r  r   r   r  r   r&   r&   r'   r   ^  sh    

&zDriverPickupVerifyParcel.postN)r   r   r   r   r&   r&   r&   r'   r  \  s   r  c               @   s   e Zd Zdd ZdS )!DriverPickupVerifyParcelExtraTestc       .   {   O   s
  t d t d t d|j |jjd}|s:tdddS |jjd}|sXtdd	dS |jjd
}|svtdddS tj|}g }	xn|D 	]d}t d t |d  t |d  |d }	|d }
|d }|d }|d }ytjj|	dj	 }t
tj}t d t
|}t
|}t
|j}t
|j}t d d}|r|r|r|rt d |d | }|d | }t |d | d | d |  tj|d | d | d | }t d |j }t | t d t d |d dkr`t d  d!}t|d" d# d$ d# d% d& | }d'}ytjjd(d)j	 }|j}W n, tk
r^ } zt | W Y d d }~X nX t|| }t | t d* ||krt d+ nytjj|
|	d,j	 }tjj||d-j	 } | r| jd.krtdd/dS | jd0krn| jd1kr&tdd2dS n"tjj|||d#d3 tdd4dS W n4 tk
r\ } zt | tdd5dS d }~X nX ntdd6dS W n4 tk
r } zt | tdd5dS d }~X nX d(}!|d7krd8}!|!d8kry|d9krR|jjd:}"|"stdd;dS |"jd<db }"|	|"krtdd>dS tjj|	d?j	 }#|#r>||#_|#j  ntjj|	|d@ n0|dAkr|jjdB}$|$s|tddCdS y|jjdA}%|%rztjj|	dj	 }|%j}&|&jdD}&t
|&dc }'t|%j }(t j!|(})t
tj"dE t
|j# }*t$j%j&|*rn
t$j'|* |)j|*dF |'  dEt
|j# dF |' }&tjj|	d?j	 }#|#rd||#_|$|#_(|&|#_)|#j  ntjj|	||$|&dG ntddHdS W n, tk
r } zt | W Y d d }~X nX n|dIkr|jjdI}+|+stddJdS tjj|	d?j	 }#t dK|# t dL|#j* t dM|+ |#rr|#j*|+krbtjj|	d?j	 }#|#rP||#_|#j  ntjj|	|d@ ntddNdS ntjj|	|d@ W n, tk
r } zt | W Y d d }~X nX ytjj|
|	d,j	 }|	r|!d8krd(|_+|j  nd(|_,|j  |!d8krydt-j-j. },t/jj|	d?j	 }-|-r<|,|-_0|,|-_1|-j  n(tjj|	dj	 }|rdt/jj||,dO W n, tk
r } zt | W Y d d }~X nX n&tjj|	dj	 }d(|_2||_3|j  |!d8kryt4|j5j6dPdQdRdS W n, tk
r
 } zt | W Y d d }~X nX yt4|j7j8j6dTdQdRdU W n, tk
rR } zt | W Y d d }~X nX y&t9jj|j7j8j:|j7j#d(dVdUdWdX W n, tk
r } zt | W Y d d }~X nX nyt4|j5j6dPdQdRdY W n, tk
r } zt | W Y d d }~X nX yt4|j7j8j6dTdQdRdZ W n, tk
	r6 } zt | W Y d d }~X nX y&t9jj|j7j8j:|j7j#d(dYdYdWdX W n, tk
	r } zt | W Y d d }~X nX |j;|	|
d[d\d] n|j;|	|
d^d_d] W q tk
	r } z|j;|	t<d`d_d] W Y d d }~X qX qW tda|dS )dNz

z&DriverPickupVerifyParcel API - in postzdata is  : r   i  zUser not logged in.)r   r   r	  zmethod_type is requiredr   zData is Requiredzcount for manpreetr  r  commentr  r  )r_   z
location 1z
location 2z9https://maps.googleapis.com/maps/api/distancematrix/json?z
location 3r  zorigins=z&destinations=z&key=z
location 4r  z
location 5rZ   r  z
location 6gobyp\D?r  r   r  r  r  g     @@T)r  z
location 7r  )r_   r  )r  r   r?   z&Your request is in Process,Please waitr*   rD  z1you are not in radius,Admin Rejected your request)r  r   r  rZ   z&Your request send to admin,Please waitzlocation errorz(you are not in radius of parcel locationNONEFscanscannedcustomerjobidz scannedcustomerjobid is requiredr   r)   z0This QR Code is not associated with this record.)r  )r  r  r  r   zname is requiredr   z/media/CustomerJobs/z/pickup_proofofdelivery.)r  r  r  r  zsignature is requiredr  zotp is requiredzmy customer detailszmy customer otpzmy otpzInvalid OTP)r  r  r   r	  r
  z&You have picked up parcel successfullyr   z%Your parcel is picked up successfullyzParcel Pickedr  )r  r  r  r  r  rZ   zParcel Not FoundzParcel not FoundzParcel Picked-Up Successfullyr  )r  r  r   r   zNot a valid requestr
  zInternal Server Errorr   r   r   )=r   r   r   r   r  r  r   r   r   r   r"   r   r  rw  rx  r   r  r!  r  r   r   r"  rZ   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  
isdisabledcomment_of_Parcelr   r   r  r   r   r  r  r`   	Driver_id).r   r   r   r   r   r	  r   r  r  r  r  Zparcel_commentr  r  r   r  r'  r(  r)  r*  r+  r,  r-  r.  r/  r2  r3  r0  r1  r   r4  r   r5  r&  scannedcustomerjobid_valr7  r6  r   r   r   r   r   r   r8  r   r  r&   r&   r'   r     s   



 "$






















&& z&DriverPickupVerifyParcelExtraTest.postN)r   r   r   r   r&   r&   r&   r'   r    s   r  c               @   s   e Zd Zdd ZdS )DriverPickupVerifyParcelTestc          V   O   sJ  t d t d t d|j |jjd}|s:tdddS |jjd}|sXtdd	dS |jjd
}|svtdddS |jjd}|stdddS y|dkr |jjd}|stdddS |jdd3 }||krtdddS tjj|dj }	|	r||	_	|	j
  ntjj||d n|dkr|jjd}
|
sJtdddS y|jjd}|rHtjj|dj }|j}|jd}t|d4 }t|j }tj|}ttjd t|j }tjj|rn
tj| |j
|d |  dt|j d | }tjj|dj }	|	r2||	_	|
|	_||	_|	j
  ntjj|||
|d ntdddS W n, tk
r } zt | W Y d d }~X nX n|dkr0|jjd}|stdd dS tjj|dj }	|	r |	j|krtjj|dj }	|	r||	_	|	j
  ntjj||d ntdd!dS ntjj||d W n, tk
r^ } zt | W Y d d }~X nX ytjj||d"j }|rd#|_ |j
  y^t!j!j" }t#jj|dj }|r||_$|j
  n(tjj|dj }|rt#jj||d$ W n, tk
r } zt | W Y d d }~X nX yt%|j&j'd%d&d'd( W n, tk
r\ } zt | W Y d d }~X nX yt%|j(j)j'd)d&d'd* W n, tk
r } zt | W Y d d }~X nX y&t*jj|j(j)j+|j(jd#d+d*d,d- W n, tk
r } zt | W Y d d }~X nX td.d/dS tdd0dS W n, tk
rD } ztd1d2dS d }~X nX d S )5Nz

z&DriverPickupVerifyParcel API - in postzdata is  : r   i  zUser not logged in.)r   r   r  zcustomerjobid is requiredr  zdriverjobid is requiredr	  zmethod_type is requiredr  r  z scannedcustomerjobid is requiredr   r)   z0This QR Code is not associated with this record.)r  )r  r  r  r   zname is required)r_   r   z/media/CustomerJobs/z/pickup_proofofdelivery.)r  r  r  r  zsignature is requiredr  zotp is requiredzInvalid OTP)r_   r  T)r  r  r   r	  r
  z&You have picked up parcel successfullyr   z%Your parcel is picked up successfullyzParcel Pickedr  )r  r  r  r  r  rZ   r   r   zNot a valid requesti  zInternal Server Errorr   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   r   r   r   r   r  r  r	  r  r7  r6  r   r   r   r   r   r   r   r   r8  r   r   r  r&   r&   r'   r     s    










&z!DriverPickupVerifyParcelTest.postN)r   r   r   r   r&   r&   r&   r'   r    s   r  c               @   s   e Zd ZdZdd ZdS )DriverRegisterzEThis API sends the OTP on customer mobile at the time of registrationc             O   s&  yt d t d|j |jjd}|jjd}|jjd}|jjd}|jjd}|jjd}	|srtd	d
dS |std	ddS |std	ddS |std	ddS |std	ddS |	std	ddS tjj|dj }
|
rxyZtjj|
dd}|r
tdddS tjj|
dd}|r.tdddS tdddS W n4 t	k
rr } zt | tdddS d }~X nX nrtjj
|||	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 | W n, t	k
r. } zt | W Y d d }~X nX |d'krtjj|
|||||d(}|rd)d*lm} |j }|jd+}t | tjj||d,}t |j |rt d- t|j}|d.krt d/ nt d0 tdddS ntd	d1dS W n4 t	k
r  } zt | td2d3dS d }~X nX d S )4NzDriverRegister API - in postzdata is  : userroler   rO  countrycoder  r[  i  zUser Role is required)r   r   zName is requiredzEmail Address is requiredzCountrycode is requiredzPhone number is requiredzPassword is required)usernameT)r  emailverifiedi  zUser already existsFr   z8A verification link has been sent to your email address.z2A customer with this email address already exists.zUser already exists.)r  rO  r[  r   c             S   s   g | ]}t jtjtj qS r&   )r   r   r   r   r   )r   r   r&   r&   r'   r     s    z'DriverRegister.post.<locals>.<listcomp>r   z/user/z/verify/rE  z-
Verify your account through following link:
zEmail verification:ztmpython4esf@gmail.com)fail_silentlyr   )r  r   rO  r  r  emailverificationlinkr   )r   z%d-%b-%Y)r   r   z
here one 3r*   zK========================Driver Slots Added Successfully====================zN=======================Driver Slots errors====================================zUser Role is not definedi  zInternal Server Error)r   r   r   r   r)  r   r   r   r   r   create_userr   r   r"   rO  r   rQ  r   r   r   r   r   r   r_   makeallsloteenablebydefault)r   r   r   r   userrole_valr6  	email_valcountrycode_val	phone_valpassword_valr.  Zdriver_emailverified_objZdriver_emailnotverified_objr   r   baselinkcompletelinkrD  r%   r   ZdateOfSlotsForCurrentr   r   ZnewdateSlotsZresposr&   r&   r'   r   l  s    





zDriverRegister.postN)r   r   r   r  r   r&   r&   r&   r'   r  j  s   r  c             C   s  t jj| dj }|rd|_d|_d|_d|_d|_d|_	d|_
d|_d|_d|_d|_d|_d|_d|_d|_d|_d	|_d|_d	|_d
|_d|_d
|_d|_d|_d|_d|_d|_d|_d|_ d|_!d|_"d|_#d|_$d|_%d|_&d|_'d|_(d|_)d|_*d|_+d|_,d|_-d|_.d|_/d|_0d|_1d|_2d|_3d|_4d|_5d|_6d|_7d|_8d|_9d|_:d|_;d|_<d|_=d|_>d|_?d|_@d|_Ad|_Bd|_Cd|_Dd|_Ed|_Fd|_Gd|_Hd|_Id|_Jd|_K|jL  dS dS )N)r_   z00:00:00z01:00:00Tz02:00:00z03:00:00z04:00:00z05:00:00z06:00:00z07:00:00z08:00:00z09:00:00z10:00:00z11:00:00z12:00:00z13:00:00z14:00:00z15:00:00z16:00:00z17:00:00z18:00:00z19:00:00z20:00:00z21:00:00z22:00:00z23:00:00r*   r?   )Mr   r   r   r   ra   rb   r@   rc   rd   rB   re   rf   rC   rg   rh   rD   ri   rj   rE   rk   rl   rF   rm   rn   rG   ro   rp   rH   rq   rr   rI   rs   rt   rJ   ru   rv   rK   rw   rx   rL   ry   rz   rM   r{   r|   rN   r}   r~   rO   r   r   rP   r   r   rQ   r   r   rR   r   r   rS   r   r   rT   r   r   rU   r   r   rV   r   r   rW   r   r   rX   rA   )ZalreadycreatedSlotIDr   r&   r&   r'   r    s    r  c               @   s   e Zd ZdZdd ZdS )DriverLoginz5This class is used for login process for driver usersc             O   s"  yt d |jjd}|jjd}|jjd}|jjd}|sNtdddS |s`tdd	dS |srtdd
dS |stdddS t||d}|d k	rt d tjj|d\}	}
|dkrt d tjj	|dj
 }|rt d |jdkr tdddS |jrtdddS ||_|j  t|j\}}|dkrFt | n|dkrXt | |jr|jr|jr|jr|jrd}nd}tdd|j|j|j|j|jj|	j||ddS tdddS t d tdddS W n> tk
r } z t d | td!d"t| dS d }~X nX d S )#NzDriverLogin API - in postr  rO  r[  fcmi  zUser Role is required)r   r   zFcm token is requiredzEmail address is requiredzPassword is required)r  r[  r?   )r  r   r*   rD  Fo   zPlease verify your email first.r  zUser is disabled by Admin.r   r   Tr   zdriver login successfull)r   r  r  r   r  r  r   tokenr_  profileupdatedr   i  zInvalid Credentials.rF  zerror isi  zException occurred : )r   r   r   r   r   r   r   get_or_creater   r   r   r  r  r  rA   r   r_   r   rO  r  r5  r4  r  r   r'  r   r"   )r   r   r   r   r  r  r  fcmtoken_valr  r  rZ   r   r`  r_  r  r   r&   r&   r'   r     sX    




(.
zDriverLogin.postN)r   r   r   r  r   r&   r&   r&   r'   r    s   r  c               @   s   e Zd Zdd ZdS )GetProfileDocumentsExtraTestc              C   s  t d|j y|jjd}|s.tdddS tjj|dj }|rtjj|j	dj }|rt
jj|dj }|r|jjsd	}n(d
|jjkr|jj}nttj|jj }|jsd	}n|j}|jsd	}n|j}i }	yLtjjd|jdjtd}
t |
 t |
d  |
d sd}n|
d }W n0 tk
rR } zt | d}W Y dd}~X nX |jrr|jrrd}|jj}nd}d	}d	}d	}d	}d	}d	}d\}}}}}|jd	krd}ttj|jj }|jd	krd}ttj|jj }|jd	krd}ttj|jj }|jd	kr$d}ttj|jj }|jd	krFd}ttj|jj }|	j|j |j!|j"|j#|j$|||||d
 td|	ddS tdi d	dS ntdi d	dS ntdi d	dS W n4 tk
r } zt | tdddS d}~X nX dS )z4 This API method is used to get profile data of userzdata is  : r   i  zUser not logged in)r   r   )r'  )r_   )r  r   httpr   )rj  r  r  rating__avgg        NTF)
rf  rg  rh  ri  rj  license_front_imagelicense_back_imageid_front_imageid_back_imagecrb_dbs_imager   r   )r   r>  r   i  zInternal Server Error)FFFFF)%r   r?  r   r   r   r   r   r   r)  r*  r   r   r   r"   r   rQ  addressr  r  r_   	aggregater   r   r5  r4  rf  r@  rg  rh  ri  rj  r,  rk  rl  rm  rn  ro  )r   r   r   r-  r.  r   r   r  r  profile_datarating_driverratingsr   vehicledetailsexistr5  r  r  r  r  r  rf  rg  rh  ri  rj  r&   r&   r'   r   I  s    



z GetProfileDocumentsExtraTest.getN)r   r   r   r   r&   r&   r&   r'   r  G  s   r  c               @   s   e Zd Zdd ZdS )GetProfileExtraTestc          &   C   s  t d|j y|jjd}|s.tdddS tjj|dj }|rtjj|j	dj }|rt
jj|dj }|r|jjsd	}n(d
|jjkr|jj}nttj|jj }|jsd	}n|j}|jsd	}n|j}i }	yLtjjd|jdjtd}
t |
 t |
d  |
d sd}n|
d }W n0 tk
rR } zt | d}W Y dd}~X nX tjj|ddj }|r|jr|jrd}|j}nd}d	}nd}d	}d\}}}}}d}d}|jdkr|jdkrd}|jdkr|jdkrd}|jd	krd}|jd	kr
d}|jd	krd}|jd	kr*d}|j d	kr:d}|	j!|j|j|j"||j#|||j$|j%|j&|j'|j(||||d td|	ddS tdi d	dS ntdi d	dS ntdi d	dS W n4 tk
r } zt | tdddS d}~X nX dS )z4 This API method is used to get profile data of userzdata is  : r   i  zUser not logged in)r   r   )r'  )r_   )r  r   r  r   )rj  r  r  r  g        NT)r   r1  Fr   r)   )r  r   rO  r  r  r  r  city
postalcodecountrynational_insurance_numberdriving_license_numberr   r  Zdocuments_approveddocuments_Lic_Existr   r   )r   r>  r   i  zInternal Server Error)FFFFF))r   r?  r   r   r   r   r   r   r)  r*  r   r   r   r"   r   rQ  r  r  r  r_   r  r   r   r+  r5  r4  rk  rl  rf  rg  rh  ri  rj  r,  rO  r  r  r  r  r  r  )r   r   r   r-  r.  r   r   r  r  r  r  r  r   r/  r  r5  rf  rg  rh  ri  rj  Zdocuments_approved_by_adminr  r&   r&   r'   r     s    



zGetProfileExtraTest.getN)r   r   r   r   r&   r&   r&   r'   r    s   r  c               @   s   e Zd Zdd ZdS )
GetProfilec          +   C   s  t d|j yZ|jjd}|s.tdddS tjj|dj }|rVtjj|j	dj }|rDt
jj|dj }|r2|jjsd	}n(d
|jjkr|jj}nttj|jj }|jsd	}n|j}|jsd	}n|j}i }	yLtjjd|jdjtd}
t |
 t |
d  |
d sd}n|
d }W n0 tk
rR } zt | d}W Y dd}~X nX |jrr|jrrd}|jj}nd}d	}d\}}}}}|jd	krd}|jd	krd}|jd	krd}|jd	krd}|jd	krd}|	j|j|j|j||j ||j|||j!|j"|j#|j$|j%|||||||d td|	ddS tdi d	dS ntdi d	dS ntdi d	dS W n4 tk
r } zt | tdddS d}~X nX dS )z4 This API method is used to get profile data of userzdata is  : r   i  zUser not logged in)r   r   )r'  )r_   )r  r   r  r   )rj  r  r  r  g        NTF)r  r   rO  r  r  r5  r4  r  r  r  r  r  r  r  r   r  rf  rg  rh  ri  rj  r   r   )r   r>  r   i  zInternal Server Error)FFFFF)&r   r?  r   r   r   r   r   r   r)  r*  r   r   r   r"   r   rQ  r  r  r  r_   r  r   r   r5  r4  rf  rg  rh  ri  rj  r,  rO  r  r  r  r  r  r  )r   r   r   r-  r.  r   r   r  r  r  r  r  r   r  r5  rf  rg  rh  ri  rj  r&   r&   r'   r   D  s    



zGetProfile.getN)r   r   r   r   r&   r&   r&   r'   r   B  s   r   c               @   s   e Zd Zdd ZdS )UpdateProfilec             O   s   t d yd4d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}|stdddS |stdddS |stdddS | stdddS |	stdddS |s$tdddS |s8tdddS |sLtdddS |s`tdddS |sttdddS |stdddS t d tjj|d j }|rt d! tjj|j	d"j }|rt d# t
jj|d$j }|rt d% ||_||_||_|
|_||_||_||_||_||_||_|j  t d& |rjd'| }t d( |||jd) t d* t d+ yt|jd,d-d.d/ W n, tk
r } zt | W Y d d }~X nX td0d1dS W n4 tk
r } zt | td2d3dS d }~X nX d S )5NzUpdateProfile - in postc:\c                sV  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 rz fddj D }x$|D ]}j| qdW n
j  xl|D ]d}|	j|}
|
jt|jt|j g|	j!}|
j" d t|j d t|j  d | d | }qW |	j|}
|
j" d | d |  dt|j d t|jj d | d | }||_#|j"  dS )Nz

r?   z;base64,r*   r   rD  rE  rF  r)   rG  rH  rI  rJ  )r   rK  rL  )r_   r   c                s   g | ]} j jj qS r&   )r   r   r   )r   r   )r   r   r&   r'   r     s    zAUpdateProfile.post.<locals>.getI420FromBase64.<locals>.<listcomp>r   z/media/Users/Drivers/r   c                s   g | ]}j j |qS r&   )r   r   )r   r`  )r   r   r&   r'   r     s    r	   r   r   z
/original-)$r   r   r"   rM  rN  r   rz  r   r   r   r   r   r   r   r   r   r   ThumbnailSizeallr   r   r_   r  rO  r   r   listdirremoverP  	thumbnailr#   rp  ro  	ANTIALIASrA   r   )rQ  rR  rS  rT  rU  rV  r   rW  r   r   r   r   r   thumbnailsize_objsfilesToRemover`  objimr   r&   )r   r   r   r   r'   rX    sT    




(



<
.z-UpdateProfile.post.<locals>.getI420FromBase64r   r   r  r  rO  r  imagebase64r  r  r  r  r  i  zUser not logged in)rZ   rD  zName is requiredzCountrycode is required)r   r   zPhone Number is requiredzEmail is requiredzaddress is requiredzcity is requiredzpostalcode is requiredzcountry is requiredz%national_insurance_number is requiredz"driving_license_number is requiredr   )r'  r   )r_   r  )r  ZfourZfivezdata:image/png;base64,zbefore function call)rR  zafter function callsixr   profiler
  z$Your profile is updated successfullyr   zprofile updated successfullyi  zInternal Server Error)r  )r   r   r   r   r   r   r   r   r)  r*  r   r   r  r  r  r  r  r  r  r  rA   r_   r   r  r   )r   r   r   r   rX  r   r6  r  r  r  address_valimagebase64_valr  r  r  r  r  r  r-  r.  r   rQ  r   r&   r&   r'   r     s    
.
zUpdateProfile.postN)r   r   r   r   r&   r&   r&   r'   r    s   r  c               @   s   e Zd Zdd ZdS )ForgotPasswordc             O   s:   y|j jd}|j jd}|s.tdddS |s@tdddS tjj|d	j }|rtjj|d
j }|rdjdd t	dD }d| d t
|j d | }	t
tj|	 }
d|
 }|	|_|j  td|dt
|gdd tdddS tdddS W n8 tk
r4 } zt| tdt
|dS d }~X nX d S )Nr  rO  r   zUser Role is required)r   r   i  zEmail Address is required)r   rD  )rO  )r  r   c             S   s   g | ]}t jtjtj qS r&   )r   r   r   r   r   )r   r   r&   r&   r'   r   >  s    z'ForgotPassword.post.<locals>.<listcomp>r   z/user/z/forgot/rE  z,
Forgot your Password click following link:
zForgot Password:ztestdemotest11@gmail.comT)r  r   zLink sent on email addresszEmail does not exist)rZ   rD  )r   r   r   r)  r   r   r   r   r   r   r"   rO  r   rQ  forgot_password_linkrA   r   r   r   )r   r   r   r   r  r  r.  r   ran_numr  r  rD  r   r&   r&   r'   r   1  s.    zForgotPassword.postN)r   r   r   r   r&   r&   r&   r'   r  /  s   r  c               @   s   e Zd Zdd ZdS )DriverAllRequestsc             C   s  t d|j yf|jjd}|s.tdddS g }tjj|dj }|rbtjj|j	dj }|rPt 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|	 xL|	D ]D}
|j|
jj|
jj|
jj|
jj|
jj|
jj|
jj|
jj|
jd	 qW t | td||ddS tdg ddS ntdg ddS ntdg ddS W n4 tk
r } zt | tdddS d}~X nX dS )z4 This API method is used to get profile data of userzdata is  : r   i  zUser not logged in)r   r   )r'  )r_   r?   )r  r*   F)r  r   )r   rD  )	r  r  r  rm  r  r  r  r  r  r   r   )r   r>  r  r   )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  r   r  r`   r   r  r  r  rm  r  r  r  r_   r   )r   r   r   r  r-  r.  r   r  r  r   r  r   r&   r&   r'   r   O  sR    
zDriverAllRequests.getN)r   r   r   r   r&   r&   r&   r'   r  M  s   r  c               @   s   e Zd Zdd ZdS )DriverOutstandingRequestsc             C   sH  t d|j y |jjd}|s.tdddS g }tjj|dj }|rtjj|j	dj }|rt d t
jj|d	j }|rt d
 tjjddj }|r|j}nd}tjj|dd}	|	rt d t t|	 x|	D ]}
d}|
jdko|
jdkrd}n:|
jdkr |
jdkr d}n|
jdkr<|
jdkr<d}|j|
jj|
jj|
jj|
jj|
jj|
jj|
jj|
jj|
jj|
jj|
jj|
jj|
jj|
jj |dt!d|
jj"  |
jj"|
j"d qW t | td||ddS tdg ddS ntdg ddS ntdg ddS W n4 t#k
rB } zt | tdddS d}~X nX dS ) z4 This API method is used to get profile data of userzdata is  : r   i  zUser not logged in)r   r   )r'  )r_   r?   )r  r*   F)r  r   )r   r   rD  zWaiting For PickupTzOut For Delivery	DeliveredzAWB-i'  )r  r  r  rm  r  r  r  rw  rx  r  r  r{  r|  Znoofitems_in_parcelrZ   r  r  r  r   r   )r   r>  r  r   )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  r   r  r#  r   r`   r   r  r  r  rm  r  r  r  rw  rx  r  r  r{  r|  no_of_item_in_parcelr"   r_   r   )r   r   r   outstandingdriverjobs_datar-  r.  r   r  r  r   r  rZ   r   r&   r&   r'   r     sr    
zDriverOutstandingRequests.getN)r   r   r   r   r&   r&   r&   r'   r    s   r  c               @   s   e Zd Zdd ZdS )DriverCompletedRequestsc             C   s  t d|j y||jjd}|s.tdddS g }tjj|dj }|rxtjj|j	dj }|rft d t
jj|d	j }|rTt d
 tjjddj }|r|j}nd}tjj|dd}	|	r:t d t t|	 x`|	D ]X}
|j|
jj|
jj|
jj|
jj|
jj|
jj|
jjddtd|
jj  |
jj|
jd qW t | td||ddS tdg ddS ntdg ddS ntdg ddS W n4 tk
r } zt | tdddS d}~X nX dS )z4 This API method is used to get profile data of userzdata is  : r   i  zUser not logged in)r   r   )r'  )r_   r?   )r  r*   F)r  r   T)r   r   rD  r  zAWB-i'  )r  r  r  rm  r  r  r  rZ   r  r  r  r   r   )r   r>  r  r   )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  r   r  r`   r   r  r  r  rm  r  r  r  r"   r_   r   )r   r   r   completeddriverjobs_datar-  r.  r   r  r  r   r  r   r&   r&   r'   r     sV    
zDriverCompletedRequests.getN)r   r   r   r   r&   r&   r&   r'   r    s   r  c               @   s   e Zd Zdd ZdS )5DriverOutstandingRequestsExtraTestDriverJobStatusNew2c             O   sD  y|j jd}|s"tdddS |j jd}|s@tdddS tj|}g }tjj|dj }|rt	jj|j
dj }|rg }	xN|D ]D}
|
d	 }|
d
 }|
d }td tjj|dj }td| tjj|ddj }td| |rntdddS |rtd tjjddj }|r.|j}nd}tjj|||ddj }td| t| |rtd |dkrd|_|j  |	j||dddd q|dkrd|_|j  |	j||dd dd n|d!krd|_|j  |	j||d"d#dd n|d$kr,d|_|j  |	j||d%d&dd nv|d'kr\d|_|j  |	j||d(d)dd nF|d*krd|_|j  |	j||d+d,dd n|	j||d-d.d/d n|	j||d0d.d/d q|	j||d1d.d/d qW td2|	d3d4S tdg dd4S ntd5g d6d4S W n4 tk
r> } zt| td7d8dS d9}~X nX d9S ):z4 This API method is used to get profile data of userr   i  zUser not logged in)r   r   r   zData is Required)r'  )r_   customer_job_idr   	status_idr?   )r  z
our driverF)r_   r  zour customerzNo Customer found with this idr*   )r  r   )r   r_   r   r   zOur driver job,rD  r)   TzStart Pickup Driver Jobr  )r  r  r   nextStatusIdr   r   z$Arrived at Parcel Picked Up LocationrF  r+   zParcel Picked Up By DriverrG  r,   zStart Drop Off JobrH  r-   zArrived at Drop Off LocationrI  r   zJob Completed99zStatus Code Not ValidZ101r
  zDriver Job not FoundzDriver not Foundr   r   )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   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     s    









z:DriverOutstandingRequestsExtraTestDriverJobStatusNew2.postN)r   r   r   r   r&   r&   r&   r'   r    s   r  c               @   s   e Zd Zdd ZdS )1DriverOutstandingRequestsExtraTestDriverJobStatusc             O   s  y|j jd}|s"tdddS |j jd}|s@tdddS |j jd}|s^tdddS |j jd	}|s|tdd
dS g }tjj|dj }	|	rtjj|	jdj }
|
rt	d t
jj|
dj }tjj|ddj }|rntdddS |rnt	d tjjddj }|r"|j}nd}tjj|||ddj }t	d| t	| |r^t	d |dkrd|_|j  tddddS |dkrd|_|j  tddddS |dkrd|_|j  tddddS |dkrd|_|j  tdd d!dS |d!kr&d|_|j  tdd"d#dS |d#krNd|_|j  tdd$d%dS tdd&dS ntdd'dS ntdg d(d)S ntdg dd)S ntd*g d+d)S W n4 tk
r } zt	| td,d-dS d.}~X nX d.S )/z4 This API method is used to get profile data of userr   i  zUser not logged in)r   r   r   zDriver Id Requiredr  zStatus Id Requiredr  zCustomer Job Id Required)r'  )r_   r?   )r  F)r_   r  zNo Customer found with this idr*   )r  r   )r   r_   r   r   zOur driver job,rD  Tr   zStart Pickup Driver Job)r   r   r  z$Arrived at Parcel Picked Up LocationrF  zParcel Picked Up By DriverrG  zStart Drop Off JobrH  zArrived at Drop Off LocationrI  zJob Completedr   zStatus Code Not ValidzDriver Job not Foundr   )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  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     s    






fz6DriverOutstandingRequestsExtraTestDriverJobStatus.postN)r   r   r   r   r&   r&   r&   r'   r!    s   r!  c             C   s   | d d S )Nr   r  r&   )elemr&   r&   r'   r  ]  s    r  c               @   s   e Zd Zdd ZdS )"DriverOutstandingRequestsExtraTestc          &   C   s  t d|j yn|jjd}|s.tdddS g }tjj|dj }|rjtjj|j	dj }|rXt d t
jj|d	j }|rFt d
 tjjddj }|r|j}nd}tjj|ddd}	|	r,t d t t|	 g }
g }g }g }x"|	D ]}|j|kr|j|j qW t d| x|D ]}g }x|	D ]}|j|kr2d}d}|jdkrn|jdkrnd}d
}n|jdkr|jdkrd}d}n|jdkr|jdkrd}d}nd|jdkr|jdkrd}d}nB|jdkr|jdkrd}d}n |jdkr|jdkrd}d}|jjjdkr,d}n|jjjdkr@d }|j|jj|jj|jj|jj|jj|jj|jj |jj!|jj"|jj#|jj$|jj%|jj&|d!t'd"|jj(  |jj(|j(||jj)t'|jd# t'|jj( |j|j|jj*|jj+||jj,|jj-|j.d$ |d%kr2|j| g }q2W |j| q W t | td&||d'd(S td&g d'd)S ntdg dd)S ntd*g d+d)S W n4 t/k
r } zt | td,d-dS d.}~X nX d.S )/z4 This API method is used to get profile data of userzdata is  : r   i  zUser not logged in)r   r   )r'  )r_   r?   )r  r*   F)r  r   )r   r   r  rD  zhere is my unique idszDriver have not yet Started JobTzDriver Started Jobz!Driver Arrived,Waiting For PickupzParcel Picked-UprF  z!Driver Start Job off for deliveryrG  zArrived At Drop Off LocationrH  r  rI  r)   zSingle-Dropr   z
Multi-DropzAWB-i'  r   )r  r  r  rm  r  r  r  rw  rx  r  r  r{  r|  rZ   r  r  r  r  zNo Of ParcelsPackageAndParcelIdSamePackageIDIdno
isDisabledr  DriverJobStatusIdparcelDeliver_Safer  r  r   r   r   )r   r>  r  r   )r   r>  r   i  zUser not logged in.i  zInternal Server ErrorN)0r   r?  r   r   r   r   r   r   r)  r*  r   r  r  r   r  sameIdForParcelsr`   r#  r  r  r  r   r   r   r  r  r  r  r  rm  r  r  r  rw  rx  r  r  r{  r|  r"   r_   rl  r  r  deliverySafePlacer  r  r   )r   r   r   r  r-  r.  r   r  r  r   same_customer_listfirst_time_get_customerfirst_time_get_customer2uniquejobIDs	unique_idparcel_datar  driverJobStatusIdrZ   r  r   r&   r&   r'   r   b  s    





z&DriverOutstandingRequestsExtraTest.getN)r   r   r   r   r&   r&   r&   r'   r#  `  s   r#  c               @   s   e Zd Zdd ZdS )#DriverOutstandingRequestsExtraTest2c       %   '   C   s  t d|j yB|jjd}|s.tdddS |jjd}|sLtdddS g }tjj|dj }|r>tjj|j	d	j }|r,t d
 t
jj|dj }|rt d tjjddj }|r|j}	nd}	tjj|ddd}
|
rt d t t|
 g }g }g }g }x&|
D ]}|j|kr|j|j qW t d| xt|D ]j}g }xH|
D ]>}|j|krTtjj }t d| t d|jj t|jj}|jdd }|jdd }|jdd }|jdd}|jdd}|jdd}t | t | t | |d | d | }tjj|d}t d|j  t d| tjdd}|| }t |j  d}|j |j krxd}t d  n4|j |j krd!}n|j |j krd"}nd#}d
}t d$ d%}|jd&kr|jdkrd'}d}n|jd&kr |jdkr d(}d}n|jd&kr"|jdkr"d)}d*}nd|jd&krD|jdkrDd+}d,}nB|jd&krf|j dkrfd-}d.}n |jd&kr|j d&krd/}d0}|jj!j"dkrd1}n|jj!j"dkrd2}|j|jj#|jj$|jj%|jj&|jj'|jj(|jj)|jj*|jj+|jj,|jj-|jj.|jj/|d3td4|jj0  |jj0|j0||jj1t|jd t|jj0 |j|j|jj2|jj3||jj4|jj5|j6|d5 |dkrT||krT|j| g }qTW ||krB|j| qBW g } t d6 x2|D ]*}!t7|!d7d8 dd9}"| j|" t |" qW t7| t8d}#t d:|# td;|#|	d<d=S td;g d<d>S ntdg dd>S ntd?g d@d>S W n4 t9k
r }$ zt |$ tdAdBdS dC}$~$X nX dCS )Dz4 This API method is used to get profile data of userzdata is  : r   i  zUser not logged in)r   r   r  zdateStatus is required)r'  )r_   r?   )r  r*   F)r  r   )r   r   r  rD  zhere is my unique idsz
Today DatezJob Pickup Dater   r   r)   r   r   z%d %b %YzDate:z
Date-time:)r  r  r  r  r  r  r  z	Here i amzDriver have not yet Started JobTzDriver Started Jobz!Driver Arrived,Waiting For PickupzParcel Picked-UprF  z!Driver Start Job off for deliveryrG  zArrived At Drop Off LocationrH  r  rI  zSingle-Dropz
Multi-DropzAWB-i'  )r  r  r  rm  r  r  r  rw  rx  r  r  r{  r|  rZ   r  r  r  r  zNo Of Parcelsr$  r%  r&  r'  r  r(  r)  r  r  r  zhere we start sorting.......c             S   s   | d S )Nr  r&   )r  r&   r&   r'   r    s    z9DriverOutstandingRequestsExtraTest2.get.<locals>.<lambda>)r'  r  zSorted list:r   r   )r   r>  r  r   )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  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  rm  r  r  r  rw  rx  r  r  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/  r0  r1  r2  r  r  r  r   r  r  r  r  r  r  ZDateStatus1r3  rZ   r  r  r  r  r  r   r&   r&   r'   r     s   











(


z'DriverOutstandingRequestsExtraTest2.getN)r   r   r   r   r&   r&   r&   r'   r4    s   r4  c               @   s   e Zd Zdd ZdS )DriverOutstandingRequestsTestc             C   s  t d|j y:|jjd}|s.tdddS g }tjj|dj }|r6tjj|j	dj }|r$t d t
jj|d	j }|rt d
 tjjddj }|r|j}nd}tjj|dd}	|	rt d t t|	 x|	D ]}
g }d}|
jdkr|
jdkrd}n:|
jdkr*|
jdkr*d}n|
jdkrF|
jdkrFd}|
jjjdkr\d}n|
jjjdkrpd}|j|
jj|
jj|
jj|
jj|
jj|
jj|
jj|
jj|
jj|
jj|
jj|
jj |
jj!|dt"d|
jj#  |
jj#|
j#|d |j| qW t | td||ddS tdg ddS ntdg ddS ntdg d dS W n4 t$k
r| } zt | td!d"dS d#}~X nX d#S )$z4 This API method is used to get profile data of userzdata is  : r   i  zUser not logged in)r   r   )r'  )r_   r?   )r  r*   F)r  r   )r   r   rD  zWaiting For PickupTzOut For Deliveryr  r)   zSingle-Dropr   z
Multi-DropzAWB-i'  )r  r  r  rm  r  r  r  rw  rx  r  r  r{  r|  rZ   r  r  r  r  r   r   )r   r>  r  r   )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  r   r  r#  r   r   r  r  r`   r  r  r  rm  r  r  r  rw  rx  r  r  r{  r|  r"   r_   r   )r   r   r   r  r-  r.  r   r  r  r   r  r2  rZ   r  r   r&   r&   r'   r     s~    
z!DriverOutstandingRequestsTest.getN)r   r   r   r   r&   r&   r&   r'   r5    s   r5  c               @   s   e Zd Zdd ZdS )DriverCompletedRequestsTestc             C   s&  t d|j y|jjd}|s.tdddS g }tjj|dj }|rtjj|j	dj }|rt d t
jj|d	j }|rt d
 tjjddj }|r|j}nd}tjj|dd}	|	rt d t t|	 x|	D ]}
g }|j|
jj|
jj|
jj|
jj|
jj|
jj|
jjddtd|
jj  |
jj|
jd |j|
jj|
jj|
jj|
jj|
jj|
jj|
jjddtd|
jj  |
jj|
jd |j| qW t | td||ddS tdg ddS ntdg ddS ntdg ddS W n4 tk
r  } zt | tdddS d}~X nX dS )z4 This API method is used to get profile data of userzdata is  : r   i  zUser not logged in)r   r   )r'  )r_   r?   )r  r*   F)r  r   T)r   r   rD  r  zAWB-i'  )r  r  r  rm  r  r  r  rZ   r  r  r  r   r   )r   r>  r  r   )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  r   r  r`   r   r  r  r  rm  r  r  r  r"   r_   r   )r   r   r   r  r-  r.  r   r  r  r   r  r2  r   r&   r&   r'   r   '  sr    
zDriverCompletedRequestsTest.getN)r   r   r   r   r&   r&   r&   r'   r6  %  s   r6  )udjango.shortcutsr   rest_framework.viewsr   django.contrib.authr   rest_framework.authtoken.modelsr   django.httpr   r   r   Driver.modelsZAdminApp.modelsmathr   r   r  r   r  r
   django.core.mailr   django.confr   django.views.generic.baser   r   rM  ior   rz  r   Customer.commonfunctionsr   r   r   django.contrib.auth.hashersr   Ztimeagor   django.db.modelsr   r  Zdjango.db.models.functionsr   r   r(   r[   r   r   r   r   r   r   r  r"  r%  r0  r2  rB  rY  r\  rr  ru  rx  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r%  r9  rA  rB  rN  rS  rV  r^  ra  rf  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r!  r  r#  r4  r5  r6  r&   r&   r&   r'   <module>   s   0h 1*?V<YTW&,?kl = 9cf   W B4O-))037 3:   tF? E75,*1 U  R  [  %U  ! ZO4 oa 7H8 " 9  T]