3
 aM                @   s|  d dl mZ d dlmZmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZ d dlT d dlT d	d
lmZ d dlmZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlm Z  d dl!m"Z" d dl#Z#eeddG dd deZ$G dd deZ%G dd deZ&G dd deZ'eeddG dd deZ(G dd deZ)G dd  d eZ*G d!d" d"eZ+G d#d$ d$eZ,G d%d& d&eZ-G d'd( d(eZ.G d)d* d*eZ/G d+d, d,eZ0G d-d. d.eZ1G d/d0 d0eZ2G d1d2 d2eZ3G d3d4 d4eZ4G d5d6 d6eZ5G d7d8 d8eZ6G d9d: d:eZ7G d;d< d<eZ8G d=d> d>eZ9eeddG d?d@ d@eZ:dS )A    )render)TemplateViewView)APIView)authenticate)Token)method_decorator)JsonResponseHttpResponse)*   )checklogindriver)settingsN)BytesIO)Image)FileSystemStorage)	Paginatordispatch)namec                   s$   e Zd ZdZdZ fddZ  ZS )showVehicalDoczAThis class is used to show the content on driver dashboard screenzuploadDoc.htmlc       	         s   t t| jf |}|d }td g }| jjjdr| jjd }tjj	|dj
 }|rtjj	|djdj
 }|rtjj	|d}||d< |S )	NidzshowVehicalDoc - in get email)r   )userr   )r   driverVehical)superr   get_context_dataprintrequestsessionhas_keyUserobjectsfilterfirstDriverModelprefetch_relatedDriverVehicle)	selfkwargscontextZdocIdrecent_driverjobs_data	email_valuser_obj
driver_objdrivervehicle_obj)	__class__ 3/var/www/html/Stanley/GoodsDelivery/Driver/views.pyr      s    zshowVehicalDoc.get_context_data)__name__
__module____qualname____doc__template_namer   __classcell__r0   r0   )r/   r1   r      s   r   c               @   s   e Zd Zdd ZdS )uploadVehicleDocc          (   C   s   t d yd<dd}dd }| jjjdr8| jjd }| jjjdrR| jjd }tjj|d	j }|rh| jjj	d
}| jjj	d}| jjj	d}	d}
|st
dddS |st
dddS |	st
dddS |
st
dddS |rtjj|dj }|rx|rhtjj	|d}|
dkr*|	}|||| |
dkrZ|	}|j}|jd}t|d= }djdd tdD }ttjd t|j d t|jj }tjj|rn
tj| dt|j d t|jj d | d | }||ttj| }|dkrt d  nt d! |d"kr$||_d|_n.|d#kr<||_d|_n|d$krR||_d|_|j   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 yd>d+d}| jjjdr| jjd }| jjjdr| jjd }tjj|d	j }|r| jjj	d,}| jjj	d-}| jjj	d}d.}|snt
dd/dS |st
dd0dS |st
dd1dS |r|d.krd2}tjj|dj"d3d4 nd3}y$t#jj|d5j }||_$|j   W n, t!k
r } zt | W Y d*d*}~X nX tjj%||||d6}|r|r|}t d7 |||jd8}t d9 |d:krvt
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 W n4 t!k
r } zt | t
d(d)dS d*}~X nX d*S )?z1This function shows the content on profile screenzuploadVehicleDoc - 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 ddlm}
 dd ldd l	dd l
t d |
j|	}t d tjj|dj }djfddtdD }tjj }ttjd t|jj d t|jjj  t d jj rt d  fddj D }x,|D ]}j| q|W nt d j  t d xl|D ]d}|
j|	}|jt |j!t |j"g|
j#}|j$ d t|j! d t|j" d | d | }qW |
j|	}t d  |j$ d! | d |  t d" dt|jj d t|jjj d! | d | }| d#kr||_%d	|_&nF| d$kr||_'d	|_(n.| d%kr||_)d	|_*n| d&kr||_+d	|_,|j$  dS )'Nz

0z;base64,1r   2/3r   4567)r   89)r    c                s   g | ]} j jj qS r0   )choiceascii_lettersdigits).0n)randomstringr0   r1   
<listcomp>I   s    zDuploadVehicleDoc.post.<locals>.getI420FromBase64.<locals>.<listcomp>   z/media/Users/Drivers/_1011c                s   g | ]}j j |qS r0   )pathjoin)rI   f)filepathosr0   r1   rM   O   s    1213r   -.14z
/original-15motor_insurancegoods_in_transit_coverpublic_liability_insurancevehicleimage)-r   splitstrbase64	b64decoder   PILr   rL   rK   rV   openr&   r!   r"   r#   rS   rangeThumbnailSizeallr   BASE_DIRdriverr   r   r   rR   existslistdirremovemakedirs	thumbnailintheightwidth	ANTIALIASsaver]   motor_insurance_statusr^   goods_in_transit_cover_statusr_   !public_liability_insurance_statusr`   vehicleimage_status)document_namecodecid_val
image_pathbase64_dataextensext	extension	byte_data
image_datar   imgr   stthumbnailsize_objsfilesToRemoverT   objimfilenamer0   )rU   rV   rK   rL   r1   getI420FromBase64.   sv    




,



<
2



z0uploadVehicleDoc.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   rf   chunkswrite)filer   rT   chunkr0   r0   r1   upload_funcp   s
    z*uploadVehicleDoc.post.<locals>.upload_funcr   userrole)r   r   docNamer   imagei  zdrivervehicle_id is required.)status_codestatus_messagezdocument_name is required.zFile is required.zFile Type is required.)rk   )r   pdfrZ   r   rE   c             S   s   g | ]}t jtjtj qS r0   )rK   rF   rL   rG   rH   )rI   rJ   r0   r0   r1   rM      s    z)uploadVehicleDoc.post.<locals>.<listcomp>rN   z/media/Users/Drivers/rO   r=   zfile saved successfullyzfile not savedr]   r^   r_      successzNot a valid requesti  zInternal Server ErrorNc                s  t | t d t d | jd}t d |d }t d |jd}t d t | t|d	 }t d
 |d	 }t d tj|}t d t|}t d ddlm}	 dd ldd l	dd l
t d |	j|}
t d tjj|dj }djfddtdD }tjj }ttjd t|jj d t|jjj  t d jj rt d  fddj D }x,|D ]}j| q|W nt d j  t d xl|D ]d}|	j|}
|
jt |j!t |j"g|	j#}|
j$ d t|j! d t|j" d | d | }qW |	j|}
t d  |
j$ d! | d |  t d" dt|jj d t|jjj d! | d | }||_%|j$  dS )#Nz

r:   z;base64,r;   r   r<   r=   r>   r   r?   r@   rA   rB   )r   rC   rD   )r   rE   c                s   g | ]} j jj qS r0   )rF   rG   rH   )rI   rJ   )rK   rL   r0   r1   rM     s    zDuploadVehicleDoc.post.<locals>.getI420FromBase64.<locals>.<listcomp>rN   z/media/Users/Drivers/rO   rP   rQ   c                s   g | ]}j j |qS r0   )rR   rS   )rI   rT   )rU   rV   r0   r1   rM     s    rW   rX   r   rY   rZ   r[   z
/original-r\   )&r   ra   rb   rc   rd   r   re   r   rL   rK   rV   rf   r&   r!   r"   r#   rS   rg   rh   ri   r   rj   rk   r   r   r   rR   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   r`   )r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   rT   r   r   r   r0   )rU   rV   rK   rL   r1   r      s`    




,



<
2r   typeactivezvehicleimage is required.zvehiclenumber is required.zvehicletype is required.TF)r   )r   )rk   vehiclenumbervehicletyper   zbefore function call)r|   zafter function callr;   )r   r   	vehicleid)r9   )r9   )&r   r   r   r   r$   r!   r"   r#   POSTgetr	   r&   r   ra   rb   rS   rg   r   rj   r   r   r   rV   rR   rl   ro   r]   rv   r^   rw   r_   rx   ru   	ExceptionupdateVehicleTyper   create)r'   r   r   r   r+   userrole_valr-   drivervehicle_idrz   document_file	file_typer.   r   pdf_filer   r   r   rU   reser   r   r`   statusr   vehical_list_objr{   r0   r0   r1   post*   s    
B


(
.





5

zuploadVehicleDoc.postN)r2   r3   r4   r   r0   r0   r0   r1   r8   )   s   r8   c               @   s   e Zd Zdd ZdS )uploadDriverDocc             C   s  t d yrd+dd}dd }| jjjdr8| jjd }| jjjdrR| jjd }tjj|d	j }|rh| jjj	d
}| jjj	d}| jjj	d}	d}
|st
dddS |	st
dddS |
st
dddS |rld}|r\|rL|
dkr|	}||||j t d |
dkr6|	}|j}|jd}t|d, }djdd tdD }ttjd t|j d t|jj }tjj|rn
tj| dt|j d t|jj d | d | }||ttj| }|dkrt d nt d  |d!kr |t_dt_n.|d"kr|t_dt_n|d#kr.|t_dt_tj   t 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 )-z1This function shows the content on profile screenzuploadDriverDoc - 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 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  t d jj rt d  fddj D }x,|D ]}j| qtW nt d j  t d xl|D ]d}|
j|	}|jt|jt|j g|
j!}|j" d t|j d t|j  d | d | }qW |
j|	}t d  |j" d! | d |  t d" dt|j d t|jj d! | d | }t 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"  t d) dS )*Nz

r:   z;base64,r;   r   r<   r=   r>   r   r?   r@   rA   rB   )r   rC   rD   )r   rE   c                s   g | ]} j jj qS r0   )rF   rG   rH   )rI   rJ   )rK   rL   r0   r1   rM   v  s    zCuploadDriverDoc.post.<locals>.getI420FromBase64.<locals>.<listcomp>rN   z/media/Users/Drivers/rO   rP   rQ   c                s   g | ]}j j |qS r0   )rR   rS   )rI   rT   )rU   rV   r0   r1   rM   |  s    rW   rX   r   rY   rZ   r[   z
/original-r\   Z16license_frontlicense_backid_frontid_backcrb_dbsZ17)-r   ra   rb   rc   rd   r   re   r   rL   rK   rV   rf   r$   r!   r   rS   rg   rh   ri   r   rj   r   r   r   rR   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   r   license_front_documentStatusr   license_back_documentStatusr   id_front_documentStatusr   id_back_documentStatusr   crb_dbs_documentStatus)rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r-   r   r   r   rT   r   r   r   r0   )rU   rV   rK   rL   r1   r   [  s    




(



<
.




z/uploadDriverDoc.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   rf   r   r   )r   r   rT   r   r0   r0   r1   r     s
    z)uploadDriverDoc.post.<locals>.upload_funcr   r   )r   r   r   r   r   i  zdocument_name is required.)r   r   zFile is required.zFile Type is required.TZ18r   rZ   r   rE   c             S   s   g | ]}t jtjtj qS r0   )rK   rF   rL   rG   rH   )rI   rJ   r0   r0   r1   rM     s    z(uploadDriverDoc.post.<locals>.<listcomp>rN   z/media/Users/Drivers/rO   r=   zfile saved successfullyzfile not savedr]   r^   r_   Z19r   r   zNot a valid requesti  zInternal Server ErrorN)r   r   )"r   r   r   r   r$   r!   r"   r#   r   r   r	   r   r   ra   rb   rS   rg   r   rj   r   r   rV   rR   rl   ro   r.   r]   rv   r^   rw   r_   rx   ru   r   )r'   r   r   r   r+   r   r-   r   rz   r   r   ZforFunr   r   r   r   r   rU   r   r   r0   r0   r1   r   W  sz    
G


(
.




zuploadDriverDoc.postN)r2   r3   r4   r   r0   r0   r0   r1   r   V  s   r   c               @   s   e Zd Zdd ZdS )DriverAddVehiclec             C   s.  t d yd"dd}| jjjdr0| jjd }| jjjdrJ| jjd }tjj|dj }|r| jjj	d}| jjj	d	}| jjj	d
}d}	|st
dddS |st
dddS |st
dddS |r|	dkrd}
tjj|djdd nd}
y$tjj|dj }||_|j  W n, tk
rD } zt | W Y dd}~X nX tjj||||
d}|r|r|}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 W n4 tk
r( } zt | t
d d!dS d}~X nX dS )#z1This function shows the content on profile screenzDriverAddVehicle - 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 ddlm}	 dd ldd l	dd l
t d |	j|}
t d tjj|dj }djfddtdD }tjj }ttjd t|jj d t|jjj  t d jj rt d  fddj D }x,|D ]}j| q|W nt d j  t d xl|D ]d}|	j|}
|
jt |j!t |j"g|	j#}|
j$ d t|j! d t|j" d | d | }qW |	j|}
t d  |
j$ d! | d |  t d" dt|jj d t|jjj d! | d | }||_%|j$  dS )#Nz

r:   z;base64,r;   r   r<   r=   r>   r   r?   r@   rA   rB   )r   rC   rD   )r   rE   c                s   g | ]} j jj qS r0   )rF   rG   rH   )rI   rJ   )rK   rL   r0   r1   rM     s    zDDriverAddVehicle.post.<locals>.getI420FromBase64.<locals>.<listcomp>rN   z/media/Users/Drivers/rO   rP   rQ   c                s   g | ]}j j |qS r0   )rR   rS   )rI   rT   )rU   rV   r0   r1   rM     s    rW   rX   r   rY   rZ   r[   z
/original-r\   )&r   ra   rb   rc   rd   r   re   r   rL   rK   rV   rf   r&   r!   r"   r#   rS   rg   rh   ri   r   rj   rk   r   r   r   rR   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   r`   )r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   rT   r   r   r   r0   )rU   rV   rK   rL   r1   r     s`    




,



<
2z0DriverAddVehicle.post.<locals>.getI420FromBase64r   r   )r   r   r   r   r   i  zvehicleimage is required.)r   r   zvehiclenumber is required.zvehicletype is required.T)rk   F)r   )r   N)rk   r   r   r   zbefore function call)r|   zafter function callr;   r   r   )r   r   r   zNot a valid requesti  zInternal Server Error)r   )r   r   r   r   r$   r!   r"   r#   r   r   r	   r&   r   r   r   ru   r   r   r   )r'   r   r   r+   r   r-   r   r   r`   r   r   r   r   r.   r{   r   r0   r0   r1   r     s^    
5
zDriverAddVehicle.postN)r2   r3   r4   r   r0   r0   r0   r1   r     s   r   c                   s$   e Zd ZdZdZ fddZ  ZS )vehiclezAThis class is used to show the content on driver dashboard screenzvehicle.htmlc                s  t t| jf |}td g }| jjjdr| jjd }tjj	|dj
 }|rg }tjj	|djdj
 }|r|j|j|jj|jj|j|jj|j|jj|j|jj|jd
 tjj	|djd}x|D ]}	t|	j qW ||d	< ||d
< tjj	dd}
|
|d< |S )Nzvehicle - in get r   )r   )r   r   )
r   r   r   r   r   r   r   r   r   r   )rk   z-idr   
driverDocsF)	isdeleted
allvehical)r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   appendr   r   r   r   r   r   r   r   r   r   r   r&   order_byr`   r   )r'   r(   r)   r*   r+   r,   r   r-   r.   dr   )r/   r0   r1   r   o  s8    
zvehicle.get_context_data)r2   r3   r4   r5   r6   r   r7   r0   r0   )r/   r1   r   j  s   r   c                   s    e Zd ZdZ fddZ  ZS )DriverPaymentHistoryzdriver_paymenthistory.htmlc                s  t t| jf |}td| jj yg }| jjjdr| jjd }tj	j
|dj }td |rtj	j
|dj }|rd}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 }|rd}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| |d7 }|j(||
|||||	t&t'|d d|d	 qtd qW t| ||d< |S  t)k
r } zt| W Y d d }~X nX d S )Nzdata is  : r   )r   r:   )r   z
01/08/2020z%d/%m/%Yr   c             3   s   | ]} t j| V  qd S )N)datetime	timedelta)rI   rJ   )to_dater0   r1   	<genexpr>  s    z8DriverPaymentHistory.get_context_data.<locals>.<genexpr>zdate = T)rk   created_at__containsjobcompletedzno_of_drops = r   zin if)jobzmin_time = zmax_time = <   zpriceperdrop = zpriceperhour =    )	serialnono_of_dropspriceperdroppriceperhourmin_timemax_timedateZtotal_hourstotal_priceelsepaymenthistory_data)*r   r   r   r   r   GETr   r   r    r!   r"   r#   r$   r   strptimecombiner   todaymintimedaysrg   	DriverJobcountnowpytztimezoner   	TIME_ZONElocalizeCustomerJobDateTimecustomerjobdriver_pickuparrived_datetimeitemsdelivered_datetimesecondsr   r   r   rb   roundr   r   )r'   r(   r)   r   r+   r,   r-   	from_date	day_countr   r   driverjob_objr   r   r   utc	driverjobcustomerjobdatetime_objtdeltar   total_minutesr   r   r   r   )r/   )r   r1   r     s     










z%DriverPaymentHistory.get_context_data)r2   r3   r4   r6   r   r7   r0   r0   )r/   r1   r     s   r   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}|sLtdddS |s^tdd	dS |sptdd
dS tjj|dj }|rtjj|dj }|r||_	||_
|j  ntjj|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



aazdata is  : driveridlatitude	longitudei  zUser not logged in)r   r   zPlease enter latitudezPlease enter longitude)r   )rk   )user_idrk   r   r   r   r   i  zInternal Server Error)r   r   r   r	   r$   r!   r"   r#   DriverCoordinatesr   r   ru   r   r   r   r   )
r'   r   argsr(   driverid_vallatitude_vallongitude_valr-   drivercoordinates_objr   r0   r0   r1   r     s2    
zDriverUpdateCoordinates.postN)r2   r3   r4   r   r0   r0   r0   r1   r     s   r   c               @   s   e Zd Zdd ZdS )DriverSendMessageToAdminc             O   s  t d t d t d|j y|jjd}|jjd}|jjd}|jjd}|jjd}|d	krp|jjd}|d	kr|jd
 }	|	rt d nt d |dkrt d |dkrt d |dkrt d d}
|o|
o|r|d	krtjj||
||d}|rt d |d	krdjdd tdD }t | t	 }|j
|	j|	}|j|}d| }t | tjj||
||d}|rt d |d	krttj| }	nd}	|dkrd}tdd||||	|jjddS  tk
r } zt | tdd d!S d }~X nX d S )"Nz



zChat  - in post zdata is  : sender	driver_idmessagemessageexistattachmentexistyesr   zattachment existszno attachmentrE   zdriver_id does not existzmessage does not existzsender does not existr   )r  admin_idr  r   zmessage saved in databasec             S   s   g | ]}t jtjtj qS r0   )rK   rF   rL   rG   rH   )rI   rJ   r0   r0   r1   rM   0  s    z1DriverSendMessageToAdmin.post.<locals>.<listcomp>   z/media/)r  r  filesr   zattachment saved in databasenor   znotification readz%d/%m/%Y %I:%M %p)r   r   r  r  r  
attachmentr   i  zInternal Server Error)r   r   )r   r   r   FILESChatr!   r   rS   rg   r   ru   r   urlrb   r   WEB_BASE_URLr	   
created_atstrftimer   )r'   r   r   r(   r   r  r  r  r  r
  r  chat_objr   fsr   r   r0   r0   r1   r     s`    






 zDriverSendMessageToAdmin.postN)r2   r3   r4   r   r0   r0   r0   r1   r     s   r   c                   s    e Zd ZdZ fddZ  ZS )DriverChatTestzdriver_chat_test.htmlc                s  t t| jf |}td g }| jjjdr| jjd }tjj	|dj
 }td |rtd tjj	|dj
 }|r|j|d< tjj	|jd}xp|D ]h}i }	|jrttj|jj }
nd	}
|j}|j}|jjd
}||	d< ||	d< |
|	d< ||	d< |j|	 qW ||d< |S )z1This function shows the content on profile screenzDriverChatTest - in get r   )r   r:   r;   )r   r   )r  rE   z%d/%m/%Y %I:%M %pr   r  r
  r   	all_chats)r   r  r   r   r   r   r   r    r!   r"   r#   r$   r   r  r  rb   r   r  r   r   r  r  r  r   )r'   r(   r)   
final_listr+   r,   r-   r  idicr
  r   r  r   )r/   r0   r1   r   L  s8    

zDriverChatTest.get_context_data)r2   r3   r4   r6   r   r7   r0   r0   )r/   r1   r  I  s   r  c                   s    e Zd ZdZ fddZ  ZS )
DriverChatzdriver_chat.htmlc                s  t t| jf |}td g }| jjjdr| jjd }tjj	|dj
 }td |rtd tjj	|dj
 }|r|j|d< tjj	|jd}xp|D ]h}i }	|jrttj|jj }
nd	}
|j}|j}|jjd
}||	d< ||	d< |
|	d< ||	d< |j|	 qW ||d< |S )z1This function shows the content on profile screenzDriverProfile - in get r   )r   r:   r;   )r   r   )r  rE   z%d/%m/%Y %I:%M %pr   r  r
  r   r  )r   r  r   r   r   r   r   r    r!   r"   r#   r$   r   r  r  rb   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   r   v  s8    

zDriverChat.get_context_data)r2   r3   r4   r6   r   r7   r0   r0   )r/   r1   r  s  s   r  c               @   s   e Zd Zdd ZdS )CheckDriverProfileCompletedc       
      O   s(  t d t d t d|j yg }d}| jjjdr| jjd }tjj|dj }t d |rt d t	jj|d	j
d
j }|r|jr|jr|jr|jr|jrd}|jd|i t d t | ttj|S ttj|S W nB tk
r" }	 z$t |	 |jd|i ttj|S d }	~	X nX d S )Nz

z)CheckDriverProfileCompleted API - in postzdata is  : Fr   )r   r:   r;   )r   r   Tprofile)r   r   r   r   r   r    r!   r"   r#   r$   r%   r   r   phoner   r   r   r
   jsondumpsr   )
r'   r   r   r(   datar  r+   r,   r-   r   r0   r0   r1   r     s2    z CheckDriverProfileCompleted.postN)r2   r3   r4   r   r0   r0   r0   r1   r    s   r  c               @   s   e Zd Zdd ZdS )DriverProfileUpdatec             C   sx  t d y4d%dd}| jjjdr0| jjd }| jjjdrJ| jjd }| jjjd}| jjjd}| jjjd}| jjjd	}| jjjd
}| jjjd}	| jjjd}
| jjjd}| jjjd}| jjjd}| jjjd}|stdddS |s
tdddS |stdddS |s2tdddS |sFtdddS |	sZtdddS |
snt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.||_||_||_||_|	|_|
|_||_||_||_|j  |r |}|||jd}t | 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 d$S )&z1This function shows the content on profile screenzDriverProfileUpdate - 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 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  t d jj rt d  fddj D }x,|D ]}j| qtW nt d j  t d xl|D ]d}|	j|}
|
jt|jt|j g|	j!}|
j" d t|j d t|j  d | d | }qW |	j|}
t d  |
j" d! | d |  t d" dt|j d t|jj d! | d | }||_#|j"  dS )#Nz

r:   z;base64,r;   r   r<   r=   r>   r   r?   r@   rA   rB   )r   rC   rD   )r   rE   c                s   g | ]} j jj qS r0   )rF   rG   rH   )rI   rJ   )rK   rL   r0   r1   rM     s    zGDriverProfileUpdate.post.<locals>.getI420FromBase64.<locals>.<listcomp>rN   z/media/Users/Drivers/rO   rP   rQ   c                s   g | ]}j j |qS r0   )rR   rS   )rI   rT   )rU   rV   r0   r1   rM     s    rW   rX   r   rY   rZ   r[   z
/original-r\   )$r   ra   rb   rc   rd   r   re   r   rL   rK   rV   rf   r$   r!   r   rS   rg   rh   ri   r   rj   r   r   r   rR   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   r   )r{   r|   r}   r~   r   r   r   r   r   r   r   r-   r   r   r   rT   r   r   r   r0   )rU   rV   rK   rL   r1   r     s`    




(



<
.z3DriverProfileUpdate.post.<locals>.getI420FromBase64r   r   r   r   r  addresscity
postalcodecountrynational_insurance_numberdriving_license_numberr   i  zDriver Id is required)r   r   zName is requiredzEmail Address is requiredzPhone is requiredzaddress is requiredzcity is requiredzpostalcode is requiredzcountry is requiredz%national_insurance_number is requiredz"driving_license_number is required)r   )r|   r   zProfile updated successfullyz%You are not allowed to change detailsi  zInternal server error.N)r   )r   r   r   r   r   r   r	   r$   r!   r"   r#   r   r   r  r!  r"  r#  r$  r%  r&  ru   r   r   )r'   r   r   r+   r   r   name_val	phone_valr!  r"  r#  r$  r%  r&  Z	image_valr-   r{   r   r   r0   r0   r1   r     sv    
6zDriverProfileUpdate.postN)r2   r3   r4   r   r0   r0   r0   r1   r    s   r  c                   s    e Zd ZdZ fddZ  ZS )DriverProfilezdriver_profile.htmlc                s  t t| jf |}td | jjjdr4| jjd }tjj	|dj
 }td |r|td tjj	|djdj
 }|r|td g }yVd	d
lm} tjj	d|jdj|d}t| t|d  |d sd}	n|d }	W n0 tk
r }
 zt|
 d}	W Y dd}
~
X nX |jsd}n|jj}|js2d}n|j}|j|j|	|j|j|jj|||j|j|j|j|j|jd ||d< tjj	dd}||d< d|d< |S )z1This function shows the content on profile screenzDriverProfile - in get r   )r   r:   r;   )r   r   r<   r   )Avgrk   )	ratingforr   ratingrating__avgg        NrE   )r   ratingsr   r  r   r   r!  r"  r#  r$  r%  r&  r   F)r   allvehicletypesr  Zprofile_section) r   r)  r   r   r   r   r   r    r!   r"   r#   r$   r%   django.db.modelsr*  
UserRatingr   	aggregater   r   r!  r   r   r   r  r   r"  r#  r$  r%  r&  r   )r'   r(   r)   r+   r,   r-   Zdriver_datar*  rating_driverr.  r   vehicletypeidr!  vehicletype_obj)r/   r0   r1   r   D  s`    zDriverProfile.get_context_data)r2   r3   r4   r6   r   r7   r0   r0   )r/   r1   r)  A  s   r)  c                   s(   e Zd ZdZdd Z fddZ  ZS )CustomerJobDetailzdriverSideCustomerDetails.htmlc             O   s   d S )Nr0   )r'   r   r   r(   r0   r0   r1   r     s    zCustomerJobDetail.postc                s  t t| jf |}td | jjjdr| jjd }i }tjj	|dj
 }|rtjj	|dj
 }|r|d }t| tjj	|dj
 }|r|jjsd}	n|jj}	|jjsd}
n|jj}
|jjsd}nttj|jjj }|jj sttjd }nttj|jjj }d	}i }|j|jj|jj|jj|jj|jd
 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(|jj)|jj*|jj+|jj|jj,j|jj-|d||jjdtd|jj  ||d t| ||d< |S )Nz Driver - CustomerJobDetail - getr   )r   )r   customerjobid)customerjob_idrE   z /static/images/open-parcel-1.pngF)
drivernamedrivercountrycodedriverphoner   driverjobidTzAWB-i'  )r   
sendernamesenderemailsenderphone
sendercitysenderpickupaddresspickuptimeslotrecipientnamerecipientphonerecipientdropoffaddressdropofftimeslotlengthweightrr   rs   
parceltyper   r   priceparcelimageparcelpdf_linkqrcoder7  	awbnumberdriverexistdriverdetailsr   ).r   r6  r   r   r   r   r   r    r!   r"   r#   r$   r   r   sendercountrycoderecipientcountrycoderM  rb   r   MEDIA_BASE_URLr   r   r   rk   countrycoder  r   r=  customerr   r   r?  r@  pickupaddressrB  rC  rD  dropoffaddressrF  rG  rH  rr   rs   rI  r   rJ  )r'   r(   r)   emailidr  r,   customer_objr7  r   rQ  rR  rM  rK  rO  driverjob_data)r/   r0   r1   r     s    


z"CustomerJobDetail.get_context_data)r2   r3   r4   r6   r   r   r7   r0   r0   )r/   r1   r6    s   r6  c                   s(   e Zd ZdZdd Z fddZ  ZS )CustomerJobDetail2zdriverSideCustomerDetails.htmlc             O   s   d S )Nr0   )r'   r   r   r(   r0   r0   r1   r     s    zCustomerJobDetail2.postc       "   .      sp  t t| jf |}td | jjjdrl| jjd }i }tjj	|dj
 }|rltjj	|dj
 }|rlg }|d }t| tjj	|d}	|	rlx|	D ]}
i }|
jsd}n|
j}|
jsd}n|
j}|
jsd}nttj|
jj }|
jrttj|
jj }nd}d}|
jr$ttj|
jj }|
j|
j }tjj	|
dj
 }d\}}}}|rl|j}|j}|j}|j}d\}}}}d\}}}}tjj	|
dj
 }|rZ|jd	kr|j}|j }ttj|j!j }n0|jd
kr|j}|
j"}|
jd |
j# }n|j}|j$d	kr$|j$}|j%}ttj|j&j }n6|j$d
krN|j$}|
j'}|
jd |
j( }n|j$}|j%}d}i } t)jj	|
dj
 }!|!r| j*|!j+j|!j+j,|!j+j-|!j+j.|!j.d d}|j*|
j.|
j'|
j/j0j1||
j(|
j2|
j3|
j4|
j"||
j#|
j5|
j6|
j7|
j8|
j9|
j:|
j;|
j|
j<j|
j|
j|||||
j.dtd|
j.  || |||||||||
j=|
j>|||d+ |j?| qW ||d< t|d  |S )Nz!Driver - CustomerJobDetail2 - getr   )r   )r   r7  )sameIdForParcelsDetailsrE   )r   	signatureotprY   F)r   )r9  r:  r;  r   r<  TzAWB-i'  )+r   r=  r>  rQ  r?  r@  rA  rB  rC  rR  rD  rE  rF  rG  rH  rr   rs   rI  r   r   rJ  specialbooking_chargetotalamountrK  rL  rM  r7  rN  rO  rP  delivery_proof_methoddelivery_toperson_namedelivery_toperson_phonedelivery_toperson_signaturepickup_proof_methodpickup_fromperson_namepickup_fromperson_phonepickup_fromperson_signaturepickupspecialnotedropoffspecialnotepickup_datetimer   payment_datetimeZcustomerjoball)rE   rE   rE   rE   )rE   rE   rE   rE   )rE   rE   rE   rE   )@r   r[  r   r   r   r   r   r    r!   r"   r#   r$   CustomerJobrQ  rR  rM  rb   r   rS  r   	parcelpdfr  r   rJ  r_  r   rl  rk  r   deliveryfailed_datetimeCustomerJobDeliveryExtraDetailsra  rb  rd  rC  rD  re  rf  rh  r=  r?  r   r   rk   rT  r  r   rU  r   r   r@  rV  rB  rW  rF  rG  rH  rr   rs   rI  r   ri  rj  r   )"r'   r(   r)   rX  r  r,   rY  ZallDatar7  Zcustomerjob_objallcustomerjob_objrQ  rR  rM  rL  rK  r`  r   rl  rk  r   ro  ra  rb  rc  rd  re  rf  rg  rh  #customerjobdeliveryextradetails_objrO  rZ  r   )r/   r0   r1   r     s    
z#CustomerJobDetail2.get_context_data)r2   r3   r4   r6   r   r   r7   r0   r0   )r/   r1   r[    s   r[  c                   s    e Zd ZdZ fddZ  ZS )DriverNotificationszdriver_notifications.htmlc                s  t t| jf |}td | jjjdr| jjd }tjj	|dj
 }|rg }tjj	|djd}|rvd}xV|D ]N}|d7 }d}	|jd	krd
}	|j||j|j|j|	|j|j|j|j|jd
 qvW t|d}
t| jjjdd}td| y"|
j|}tt| td W nR tk
r<   |
j|
j}td Y n* tk
rd   |
j|
j}td Y nX ||d< d|d< tjj	|djdd |S )z<This function shows the content on customer dashboard screenzDriverNotifications - in get r   )r   )r   z-idr   r   rE   zParcel Pickup RequestzPickup Request)
r   r   	fordrivernotificationtypejobtypenotificationtextr   r7  r   deleted   pagezpage = tryZexcept1Zexcept2all_notificationsrk   r   read)r   ) r   rs  r   r   r   r   r   r    r!   r"   r#   Notificationsr   ru  r   r   rt  rw  r   r7  r   rx  r   rq   r   r   rz  lenPageNotAnInteger	num_pages	EmptyPager   )r'   r(   r)   r+   r,   notifications_datar|  r   notificationrv  	paginatorrz  )r/   r0   r1   r   x  sV    




z$DriverNotifications.get_context_data)r2   r3   r4   r6   r   r7   r0   r0   )r/   r1   rs  u  s   rs  c                   s    e Zd ZdZ fddZ  ZS )MyJobszdriver_myjobs.htmlc       
   	      s   t t| jf |}td g }| jjjdr| jjd }tjj	|dj
 }|rtjj	|dj
 }|rtjj	|d}x^|D ]V}|js|jr|jrd}	q|jrd}	nd}	|j|j|jjj|jj|jj|	|jd	 qxW ||d
< d|d< d|d< |S )z<This function shows the content on all customer jobs by userzMyJobs - in get r   )r   )r   )rk   	Completedz	Picked UpAssigned)r=  r   r?  rV  r   r   all_driverjobszMy Jobsheader_titler  myjobs_section)r   r  r   r   r   r   r   r    r!   r"   r#   r$   r   
jobstartedr   r   r   rk   r   
first_namer?  rV  r   )
r'   r(   r)   r  r+   r,   r-   driverjobs_objr   r   )r/   r0   r1   r     s8    
zMyJobs.get_context_data)r2   r3   r4   r6   r   r7   r0   r0   )r/   r1   r    s   r  c                   s    e Zd ZdZ fddZ  ZS )DriverOutstandingRequestszdriver_myjobs.htmlc       
         s  t t| jf |}td g }| jjjdr| jjd }tjj	|dj
 }|rtjj	|dj
 }|rtjj	|dd}x|D ]x}|js|jr|jrd}	q|jrd}	nd	}	|	dks|	d	kr|j|jj|jj|jj|jj|jj|jj|jj|	|jd
	 qW ||d< d|d< d|d< |S )z<This function shows the content on all customer jobs by userz#DriverOutstandingRequests - in get r   )r   )r   F)rk   r   r  z	Picked Upr  )	r=  r>  r?  rA  rC  rE  r7  r   r   r  zOutstanding Requestsr  r  r  )r   r  r   r   r   r   r   r    r!   r"   r#   r$   r   r  r   r   r   r=  r>  r?  rV  rC  rW  r   )
r'   r(   r)   r  r+   r,   r-   r  r   r   )r/   r0   r1   r     s@    
z*DriverOutstandingRequests.get_context_data)r2   r3   r4   r6   r   r7   r0   r0   )r/   r1   r    s   r  c                   s    e Zd ZdZ fddZ  ZS )DriverOutstandingRequests2zdriver_myjobs.htmlc                s  t t| jf |}td g }| jjjdrv| jjd }tjj	|dj
 }|rvtjj	|dj
 }|rvtjj	|dd}td tjj	ddj
 }|r|j}	nd	}	tjj	|ddd
}
|
rftd tt|
 g }g }g }g }g }td| g }xp|
D ]f}|j|kr|jdkr"|j|j d}d}|jdkrL|jdkrLd}d}n|jdkrn|jdkrnd}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rd}d}|jjjdkr
d}n|jjjdkrd}|dkr|j|jj|jj|jj|jj|jj|jj |jj!||j"d	 qW ||d < d!|d"< d#|d$< |S )%z<This function shows the content on all customer jobs by userz$DriverOutstandingRequests2 - in get r   )r   )r   F)rk   r   r;   )r   rE   )rk   r   deliveryfailedr<   zhere is my unique idsr   r:   zDriver have not yet Started JobTzDriver Started Jobz!Driver Arrived,Waiting For PickupzParcel Picked-Upr>   z!Driver Start Job off for deliveryr?   zArrived At Drop Off Locationr@   	DeliveredrA   r   zSingle-Dropr   z
Multi-Drop)	r=  r>  r?  rA  rC  rE  r7  r   r   r  zOutstanding Requestsr  r  r  )#r   r  r   r   r   r   r   r    r!   r"   r#   r$   r   SupportDetailr  r  sameIdForParcelsr   r  arrived_at_pickupparcel_picked_by_driverstart_DropOffarrived_atDropOffLocationr   r   order	ordertyper=  r>  r?  rV  rC  rW  r\  r   )r'   r(   r)   r  r+   r,   r-   r  supportdetail_objsupport_phoner   same_customer_listfirst_time_get_customerfirst_time_get_customer2uniqueoutstandingdriverjobs_dataparcel_datar   driverJobStatusIdr   r  )r/   r0   r1   r     s    

z+DriverOutstandingRequests2.get_context_data)r2   r3   r4   r6   r   r7   r0   r0   )r/   r1   r    s   r  c                   s    e Zd ZdZ fddZ  ZS )DriverCompletedRequestszdriver_myjobs.htmlc       
         s
  t t| jf |}td g }| jjjdr| jjd }tjj	|dj
 }|rtjj	|dj
 }|rtjj	|dd}xx|D ]p}|js|jr|jrd}	q|jrd}	nd	}	|	dkrz|j|jj|jj|jj|jj|jj|jj|jj|	|jd
	 qzW ||d< d|d< d|d< |S )z<This function shows the content on all customer jobs by userz!DriverCompletedRequests - in get r   )r   )r   T)rk   r   r  z	Picked Upr  )	r=  r>  r?  rA  rC  rE  r7  r   r   r  zCompleted Requestsr  r  r  )r   r  r   r   r   r   r   r    r!   r"   r#   r$   r   r  r   r   r   r=  r>  r?  rV  rC  rW  r   )
r'   r(   r)   r  r+   r,   r-   r  r   r   )r/   r0   r1   r   L  s@    
z(DriverCompletedRequests.get_context_data)r2   r3   r4   r6   r   r7   r0   r0   )r/   r1   r  I  s   r  c                   s    e Zd ZdZ fddZ  ZS )DriverCompletedRequests2zdriver_myjobs.htmlc                s  t t| jf |}td g }| jjjdr| jjd }tjj	|dj
 }|rg }tjj	|dj
 }|rtjj	|dd}x8|D ].}	|	j|kr|	jdkr|j|	j d}
|	jdkr|	jd	krd
}
d}n|	jdkr|	jd	krd}
d}n|	jdkr|	jd	krd}
d}nd|	jdkr0|	jd	kr0d}
d}nB|	jdkrR|	jd	krRd}
d}n |	jdkrr|	jdkrrd}
d}|
dkr|j|	jj|	jj|	jj|	jj|	jj|	jj|	jj|
|	jd	 qW ||d< d|d< d|d< |S )z<This function shows the content on all customer jobs by userz"DriverCompletedRequests2 - in get r   )r   )r   T)rk   r   r   zDriver have not yet Started JobFzDriver Started Jobr;   z!Driver Arrived,Waiting For Pickupr<   zParcel Picked-Upr>   z!Driver Start Job off for deliveryr?   zArrived At Drop Off Locationr@   r  rA   )	r=  r>  r?  rA  rC  rE  r7  r   r   r  zCompleted Requestsr  r  r  )r   r  r   r   r   r   r   r    r!   r"   r#   r$   r   r  r   r  r  r  r  r  r   r   r=  r>  r?  rV  rC  rW  r\  r   )r'   r(   r)   r  r+   r,   r  r-   r  r   r   r  )r/   r0   r1   r   u  sb    

z)DriverCompletedRequests2.get_context_data)r2   r3   r4   r6   r   r7   r0   r0   )r/   r1   r  r  s   r  c               @   s   e Zd ZdZdd ZdS )Loginz5This class is used for login process for driver usersc             O   sb  yt d |jjd}|s*tdddS |jjd}|sHtdddS t||d}|d k	rt d	 tjj|d
j }|r t d |j	dkrtdddS |j
rtdddS tjj|d
\}}	|jjd|jd< d|jd< |j|jd< tdd|jddS tdddS 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DeliveryLogin Web - in postr   r   zEmail address is required)r   r   passwordzPassword is required)usernamer  r;   )r   r<   Fo   zPlease verify your email first.d   zUser is disabled by Admin.rk   r   r   zdriver login successfull)r   r   tokenr   r   zInvalid Credentials.zerror iszException occurred : )r   r   r   r	   r   r$   r!   r"   r#   emailverified
isdisabledr   get_or_creater   r   keyr   rb   )r'   r   r   r(   r+   password_valr   r-   r  r   errorr0   r0   r1   r     s8    



z
Login.postN)r2   r3   r4   r5   r   r0   r0   r0   r1   r    s   r  c                   s$   e Zd ZdZdZ fddZ  ZS )	DashboardzAThis class is used to show the content on driver dashboard screenzdriver_dashboard.htmlc          	      sV  t t| jf |}td g }| jjjdr| jjd }tjj	|dj
 }|rtjj	|djdj
 }|r||d< d|d< tjj	|djd	d d
 }|rxd|D ]\}|jjsttjd }	nttj|jjj }	|j|jj|jj|jj|jj|	|jjd qW ||d< tjj	|dj }
tjj	|ddj }d}|
|d< ||d< ||d< |S )NzDriverDashboard - in get r   )r   )r   r   rk   r   )rk   z-id   z /static/images/open-parcel-1.png)r=  rC  rV  rW  rK  r7  recent_driverjobsF)rk   r   r   	totaljobstotalpendingjobstotalearnings)r   r  r   r   r   r   r   r    r!   r"   r#   r$   r%   r   r   r   r   rb   r   rS  r   r   r=  rC  rV  rW  r   r   )r'   r(   r)   r*   r+   r,   r-   r  r   rK  r  r  r  )r/   r0   r1   r     s@    
zDashboard.get_context_data)r2   r3   r4   r5   r6   r   r7   r0   r0   )r/   r1   r    s   r  );django.shortcutsr   django.views.generic.baser   r   rest_framework.viewsr   django.contrib.authr   rest_framework.authtoken.modelsr   django.utils.decoratorsr   django.httpr	   r
   Driver.modelsZAdminApp.models
decoratorsr   django.confr   r  rc   rV   rK   rL   ior   re   r   django.core.files.storager   django.core.paginatorr   r   r   r8   r   r   r   r   r   r   r  r  r  r  r)  r6  r[  rs  r  r  r  r  r  r  r  r0   r0   r0   r1   <module>   s^   (  / $q"\$<*+! JV 6%)P);#