3
4{b>=                @   s  d dl mZ d dlmZmZ d dlmZmZmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ dd	lmZmZmZ d d
lmZ d dlT d dlmZ d dlT d dlT d dlmZ d dl mZ d dlm Z  d dl!Z!d dl"Z"d dl#Z#d dl$Z$d dl%Z%d dl&m'Z' d dl(m)Z) d dl#m*Z* d dl+Z+d dl,Z,ddl-m.Z.m/Z/ d dl0m1Z1 d dl2Z2d dl3Z3d dl4m5Z5 d dl6Z6d dl7Z7d dl8m9Z9 d dl:m;Z; d dlmZ dd Z<dd Z=dd Z>d d! Z?d"d# Z@d$d% ZAd&d' ZBG d(d) d)eZCG d*d+ d+eZDd,d- ZEeed.d/G d0d1 d1eZFG d2d3 d3eZGG d4d5 d5eZHeed.d/G d6d7 d7eZIeed.d/G d8d9 d9eZJG d:d; d;eZKd<d= ZLG d>d? d?eZMG d@dA dAeZNG dBdC dCeZOG dDdE dEeZPG dFdG dGeZQG dHdI dIeZReed.d/G dJdK dKeZSG dLdM dMeZTG dNdO dOeZUG dPdQ dQeZVeed.d/G dRdS dSeZWeed.d/G dTdU dUeZXeed.d/G dVdW dWeZYeed.d/G dXdY dYeZZG dZd[ d[eZ[eed.d/G d\d] d]eZ\eed.d/G d^d_ d_eZ]eed.d/G d`da daeZ^dbdc Z_eed.d/G ddde deeZ`eed.d/G dfdg dgeZaeed.d/G dhdi dieZbeed.d/G djdk dkeZceed.d/G dldm dmeZdeed.d/G dndo doeZeeed.d/G dpdq dqeZfG drds dseZgG dtdu dueZhG dvdw dweZiG dxdy dyeZjG dzd{ d{eZkG d|d} d}eZlG d~d deZmG dd deZnG dd deZoeed.d/G dd deZpG dd deZqG dd deZrG dd deZsG dd deZtG dd deZuG dd deZvdS )    )render)TemplateViewView)HttpResponseJsonResponseHttpResponseRedirect)authenticate)User)Token)APIView   )checklogincustomerchecklogincompanycheckifcustomeralreadylogin)method_decorator)*)sendfcmnotification)assigndriverforparcel)redirect)reverseN)settings)	send_mail)	timedelta)getunreadnotificationcountgenerateparcelpdf)make_password)	Paginator)BytesIO)Image)r   c             C   s  t jj| dj }tjj|d}|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|_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|_M|jN  dS dS )N)id)driverz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:0010)ODriverModelobjectsfilterfirstDriverAllSlotscreateopeninghourSlot1closinghourSlot1activeSlot1openinghourSlot2closinghourSlot2activeSlot2openinghourSlot3closinghourSlot3activeSlot3openinghourSlot4closinghourSlot4activeSlot4openinghourSlot5closinghourSlot5activeSlot5openinghourSlot6closinghourSlot6activeSlot6openinghourSlot7closinghourSlot7activeSlot7openinghourSlot8closinghourSlot8activeSlot8openinghourSlot9closinghourSlot9activeSlot9openinghourSlot10closinghourSlot10activeSlot10openinghourSlot11closinghourSlot11activeSlot11openinghourSlot12closinghourSlot12activeSlot12openinghourSlot13closinghourSlot13activeSlot13openinghourSlot14closinghourSlot14activeSlot14openinghourSlot15closinghourSlot15activeSlot15openinghourSlot16closinghourSlot16activeSlot16openinghourSlot17closinghourSlot17activeSlot17openinghourSlot18closinghourSlot18activeSlot18openinghourSlot19closinghourSlot19activeSlot19openinghourSlot20closinghourSlot20activeSlot120openinghourSlot21closinghourSlot21activeSlot21openinghourSlot22closinghourSlot22activeSlot22openinghourSlot23closinghourSlot23activeSlot23openinghourSlot24closinghourSlot24activeSlot24save)driverID
driver_objdriverslotsobj ru   5/var/www/html/Stanley/GoodsDelivery/Customer/views.pycreateDriverSlots   s    rw   c             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resru   ru   rv   	convert24q   s&      $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    Trx            r         	   
      r                                       passfail) r#   r$   r%   r&   r'   r+   r.   r1   r4   r7   r:   r=   r@   rC   rF   rI   rL   rO   rR   rU   rX   r[   r^   ra   rd   rg   rj   rm   rp   rq   	Exceptionprint)slotIdslotId2DriverIDrs   rt   eru   ru   rv   makeslotAvailable   st    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   Trx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r'   r$   r%   r&   r+   r.   r1   r4   r7   r:   r=   r@   rC   rF   rI   rL   rO   rR   rU   rX   r[   r^   ra   rd   rg   rj   rm   rp   rq   r   r   )r   r   driveridforslotsrt   r   ru   ru   rv   makeslotAvailablenew   sr    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)sameIdForParcelsDetailsTr   r   F)customerjobzwe are in driver job-r   r|   rx   Pickupslotidzone 1zone 2zone 3zone 4zone 5)r    zone 6zone 7zone 8zone 9zone 10)CustomerJobr$   r%   	DriverJobr&   r   r    r   pickuptimeslotDatepickuptimeslotsplitr   r   dropofftimeslotr'   dateOfSlotsr   )sameparcelIDcustomerjob_obj_allpackageCompleted	startSlotlastSlotrr   driverExistcustomerdJobstringFirstonetwopickupSlotIDstringSeconddeliverySlotID	slotsFindidofslottablespickupdateCuystomerparcelpickupdater    rt   dru   ru   rv   slotStatusonJobCompletenew  s    







r   c             C   s|  t jj| d}d}d}d}d}d}x<|D ]2}tjj|dj }|r*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 |rxt||d | d S )N)r   Tr   r   F)r   r   r   r|   rx   r   )r   r$   r%   r   r&   r    r   r   r   r   r   r   r   r   r   )r   r   r   r   r   rr   r   r   r   r   r   r   r   r   r   ru   ru   rv   slotStatusonJobCompleteK  sR    



r   c             C   s  t | j | jjd}ytjj|d}d}|rx,|D ]$}tjj|dj }|jdkr4d}q4W |dkrx>|D ]6}d|_	tjj|dj }|rd|_	|j
  |j
  qjW t| tddiS tddiS ntddiS W n2 tk
r } zt | tddiS d }~X nX d S )	Nr   )r   T)r   Fstatus   i  )r   POSTgetr   r$   r%   r   r&   
jobstarted	isdeletedrq   r   r   r   )requestr   customerjob_objcancelParcelcr   customr   ru   ru   rv   cancelOrderv  s2    



r   c                   s(   e Zd ZdZdd Z fddZ  ZS )cancelOrder2zcustomerjobdetail.htmlc             O   s   d S )Nru   )selfr   argskwargsru   ru   rv   post  s    zcancelOrder2.postc       
         s   t t| jf |}| 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}x|D ]}	d|	_|	j  qW d|d< td	S )
Nemail)r   )userr   )r   TZDoner   z/path/)superr   get_context_datar   sessionhas_keyr	   r$   r%   r&   Customerr   r   r   rq   r   )
r   r   contextemailiddatauser_objcustomer_objZsameParrcelIDr   r   )	__class__ru   rv   r     s     
zcancelOrder2.get_context_data)__name__
__module____qualname__template_namer   r   __classcell__ru   ru   )r   rv   r     s   r   c                   s    e Zd ZdZ fddZ  ZS )TestWebzcustomer_quickfareestimate.htmlc                s  t t| jf |}td ddlmmmm m	  fddfdd}dd	 }fd
d}t
jj }|r|jrtjjddd}x|D ]g }t jojrjrtd tjjdjjd}	t|	dkr|jjjjd\}
}|
rl||d}n nT|jj|	d\}
}|
r@||d}n,|jjjjd\}
}|
rl||d}n t|dkrtdt|d d   qtdj qW ntd td |S )z<This function shows the content on customer dashboard screenzTestWeb - in get r   )radianscossinasinsqrtc       	         s   t t| |||g\} }}}t | |||g\} }}}|| }||  }|d d | | |d d   }d | }d}|| S )Nrx   i  )mapfloat)	lat1lon1lat2lon2dlondlatar   r)r   r   r   r   r   ru   rv   	haversine  s    0z+TestWeb.get_context_data.<locals>.haversinec                sr   g }xN|D ]F}t jj|dj }|r
 | ||j|j}|j|j|jj	|d q
q
W t
|dkrfd}nd}||fS )N)r    )driveriddrivervehicledistancer   TF)DriverCoordinatesr$   r%   r&   latitude	longitudeappendr   vehicletypenamelen)senderlatitudesenderlongituders   nearestdrivers_datar    drivercoordinates_objr   success)r   ru   rv   &get_nearestdriversdata_from_driversobj  s    
zHTestWeb.get_context_data.<locals>.get_nearestdriversdata_from_driversobjc             S   s   t | dd dd} | S )Nc             S   s   | d S )Nr   ru   )iru   ru   rv   <lambda>  s    zLTestWeb.get_context_data.<locals>.sort_nearestdrivers_data.<locals>.<lambda>F)keyr   )sorted)r  ru   ru   rv   sort_nearestdrivers_data  s    z:TestWeb.get_context_data.<locals>.sort_nearestdrivers_datac                s   g }t jjjjdj }|r|j}t jj|djd}|rxt|D ]l}tjjd|d}|rBxR|D ]J}	t	jj|	dj }
|
r` | ||
j
|
j}|j|	j|	jj|d d}q`q`W qBW t|dkrd}nd	}||fS )
N)r   )Zcarryinglimitinkg__gtecarryinglimitinkgr   )r   r  )r    )r   r   r   TF)VehicleTyper$   r%   r  r   r&   r  order_byr#   r   r   r   r  r  r  )r  r  vehicletypeidr  Zrequiredvehicletype_objZvehiclecarryinglimitZbiggervehicletype_objZbiggervehiclers   r    r  r   r	  )r   jobru   rv   %get_nearestdriversdata_biggervehicles  s.    


zGTestWeb.get_context_data.<locals>.get_nearestdriversdata_biggervehicles   )r   Zid__gte
)r   vehicletype_id)r  r  r  )r  )r  r  rs   z job assigned to driver with id: r   zno driver found for job: zAuto assign is disabledend)r   r   r   r   mathr   r   r   r   r   BackendControlr$   r&   enabler   r%   r  r  r  r#   r   r  r   )r   r   r   r
  r  r  backendcontrol_objZpendingcustomerjobsr  rs   r	  )r   )r   r   r   r  r   r   r   rv   r     sF    

zTestWeb.get_context_data)r   r   r   r   r   r   ru   ru   )r   rv   r     s   r   c             O   s   t d y| jjd}|s(tdddS tjj|dj }|rdt_	tj
j|j|j}t | |d d	krtjj|dj  td
ddS tdddS 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 )zFThis function is being used to delete the parcel type details by Adminz"Customer - in delete_card functioncard_idi  zcard_id is required.)status_codestatus_message)r   *sk_test_P9sozPTZ5nZbhc3fOFCsjNqm00hYGCvJ7ldeletedTr   zRecord deleted successfully.zBad Request.i  zInternal Server ErrorN)r   r   r   r   
StoredCardr$   r%   r&   stripeapi_keyr   delete_sourcestripe_customer_idstripe_card_iddeleter   )r   r   r   r  storedcard_objr   r   ru   ru   rv   delete_card>  s*    r+  dispatch)r  c               @   s   e Zd Zdd ZdS )CustomerAddCardc             O   sf  t d y"| jjjdr&| jjd }| jjjdr@| 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 |
std	ddS ttj	t
_tjj|dj }|rtjj|dj }|rt d yt
jj|t|t|	|
dd}|d d }|d d }|d d }|d d }|d }t d| t d| t
jj|j|d}tjj||j||||d}tdddS  tk
r } zt | td	d dS d!}~X nX q*t
jj|d}|d }t d"| tjj||d#d$}|r*yt
jj|t|t|	|
dd}|d d }|d d }|d d }|d d }|d }t d| t d| t
jj||d}t | ||_||_||_||_|j  tdddS  tk
r } zt | td	d dS d!}~X nX 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CustomerAddCard - in post r   userrole	card_namecard_numbercard_expiry_monthcard_expiry_yearcard_expiry_cvci  zcard_name is required)r  r   zcard_number is requiredzcard_expiry_month is requiredzcard_expiry_year is requiredzcard_expiry_cvc is required)r   )r   zatleast one card is stored)number	exp_monthexp_yearcvc)cardr8  last4r5  r6  r   z
card_id = ztoken_id = )source)r   r'  r(  !stripe_card_number_lastfourdigitsstripe_card_exp_monthstripe_card_exp_yearr   z Your card is added successfully.zYour card details are invalidNzcustomer_id = T)r   r'  
is_defaultz"You are not authorized to add cardi  zInternal server error.)r   r   r   r   r   r   r   r   r   
STRIPE_KEYr$  r%  r   r$   r%   r&   r#  r
   r(   r   create_sourcer'  r   r(  r;  r<  r=  rq   )r   r   r   r   	email_valuserrole_valr/  r0  r1  r2  r3  r   r*  r8  last_four_digitsr5  r6  r  token_idres2r   r   customer_idru   ru   rv   r   _  s    




zCustomerAddCard.postN)r   r   r   r   ru   ru   ru   rv   r-  ]  s   r-  c                   s    e Zd ZdZ fddZ  ZS )CustomerWalletzcustomer_wallet.htmlc       
         s   t t| jf |}td | jjjdr4| jjd }| jjjdrN| jjd }g }tjj	|dj
 }|rtjj	|d}|rd}x8|D ]0}	|d7 }|j||	j|	jd |	j |	jd	 qW ||d
< |S )zGThis class shows the content on show all companies screen to Admin userzCustomerWallet-in get r   r.  )r   )r   r   r   /)serialnolast4digitsexpiry_dater  storedcards_data)r   rG  r   r   r   r   r   r   r$   r%   r&   r#  r  r;  r<  r=  r   )
r   r   r   rA  rB  rL  r   r*  rI  r8  )r   ru   rv   r     s*    
zCustomerWallet.get_context_data)r   r   r   r   r   r   ru   ru   )r   rv   rG    s   rG  c                   s    e Zd ZdZ fddZ  ZS )CompanyCreditRequestsz"company_showallcreditrequests.htmlc                s  t t| jf |}td | jjjdr4| jjd }| jjjdrN| jjd }g }|dkr|rtjj	|dj
d}|rd}x<|D ]4}|d7 }|j||j|j|j|jjd	|jd
 qW |dkr$|r$tjj	|dj
d}|r$d}x<|D ]4}|d7 }|j||j|j|j|jjd	|jd
 qW t| t|d}	t| jjjdd}
td|
 y|	j|
}tt| W nR tk
r   |	j|	j}td Y n* tk
r   |	j|	j}td Y nX ||d< |S )zGThis class shows the content on show all companies screen to Admin userzCompanyCreditRequests-in get r   r.  company)company_emailz-idr   r   z%d/%m/%Y %I:%M:%S %p)rI  creditsnote_by_companyr   dater   r   r   pagezpage = except1except2all_credit_requests)r   rM  r   r   r   r   r   CreditsRequestedr$   r%   r  r  rP  rQ  r   
created_atstrftimer   r   r   GETr   rS  r  PageNotAnInteger	num_pages	EmptyPage)r   r   r   rA  rB  all_credit_requests_datacreditsrequested_objrI  req	paginatorrS  )r   ru   rv   r     sd    







z&CompanyCreditRequests.get_context_data)r   r   r   r   r   r   ru   ru   )r   rv   rM    s   rM  c               @   s   e Zd Zdd ZdS )CompanyMakeCreditrequestc             O   sf  t d y"| jjjdr&| jjd }| jjjdr@| jjd }|jjd}|jjd}|sjtdddS |s|tdd	dS |d
krtjj	|d
dj
dj }|rtjj|||dd}	|	rtdddS |dkrtjj	|ddj
dj }|r*tjj|||dd}	|	r*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#CompanyMakeCreditrequest - in post r   r.  credits_requestcredits_request_notei  zcredits_request is required)r  r   z credits_request_note is requiredrN  )user__emailroler   pending)rO  rP  rQ  r   r   r	  r   z-You are not authorized to make credit requesti  zInternal server error.N)r   r   r   r   r   r   r   r   r$   r%   prefetch_relatedr&   rW  r(   r   )r   r   r   r   rA  rB  rc  rd  r   r_  r   ru   ru   rv   r   9  s8    
zCompanyMakeCreditrequest.postN)r   r   r   r   ru   ru   ru   rv   rb  7  s   rb  c               @   s   e Zd Zdd ZdS )GetFaresTestc       )      O   sB  yt d t d dd }dd }|jjd}|jjd}t d	 t t| tj|}t d
 t | d}ttj}	g }
d}xF|D ]<}t d y|d dkr|d7 }W n* t	k
r } zt | W Y dd}~X nX |d }|d }|d }|d }|d }|d }t
jj||||ddj }|r:t d |j}nlt d |d d |d  }|d d |d  }|||d\}}}t ||| |dkr|}ntdd d!S tjjdd"d#j }tjjdd"d#}|rBxn|D ]d}||jkr|j}nr|j}t d t |j t | ||j }|t|kr8t|d }n|}t | t |j |||j  }t | ttj}|jd$kr|d%7 }nV|jd&kr|d'7 }n@|jd(kr|d)7 }n*|jd*kr|d)7 }n|jd+kr|d,7 }t|
|k r|
j|jtt|d-||jd. n0x.|
D ]&} | d/ |jkr| d0  |7  < qW qW t |
 d}!| jjjd1rj| jjd1 }"| jjjd2r| jjd2 }#|#d3krt jj|"d3d4j!d5j }$|$rt"jj|$d6j }%|%r|%j#}!qW t$jjd7d8j }&|&r|&j%}'nd9}'||' }(tdd:|
|(|!d;S  t	k
r< } zt | td<d=d!S d}~X nX dS )>zPThis function is being used to return fares according to different vehicle typeszGetFaresTest Web- in post z

c             S   sh  y6t tj}d}| r\|r\t|d |  d | d |  tj|d |  d | d | }|j }t| td |d dkr2d}t|d	 d
 d d
 d d | }t | jdd
 }t | jdd }	t |jdd
 }
t |jdd }t	||	|
||d|d	 d
 d d
 d d d}|j
  dd|fS dS W n* tk
rb } zt| dS d }~X nX d S )Nz9https://maps.googleapis.com/maps/api/distancematrix/json?zorigins=z&destinations=z&key=r  r   OKgobyp\D?rowsr   elementsr   value,r   mileduration)r  r  recipientlatituderecipientlongituder   distanceunittimer   r	    Enter valid addressr}   )ru  rv  r}   )ru  rv  r}   )r   r   GOOGLE_API_KEYr   requestsr   jsonr   r   DistanceTablerq   r   )sendercoordinates_valrecipientcoordinates_valr%  urlr   xmultiplicationfactordistanceinmilesr  r  rq  rr  distancetable_objr   ru   ru   rv   getdistancebetweentwolocationsl  s.    
 "$.
z9GetFaresTest.post.<locals>.getdistancebetweentwolocationsc             S   s   g }y~t jjd|dj }|rp| }||jkr4|j}n<|j}||j }|t|kr^t|d }n|}|||j  }ddtt	|dfS  t
k
r } zt| dd|fS d }~X nX d S )	Nro  )rs  r  r   r   r	  rx   i  zEnter valid address)r  r$   r%   r&   fixeddistancebaserater   addittionalrateperunitroundr   r   r   )r  vehicletype_valr   vehicletype_objr   rater   ru   ru   rv   'calculatefarefromdistanceforvehicletype  s"    

zBGetFaresTest.post.<locals>.calculatefarefromdistanceforvehicletypeparcels_datanoofparcelsr"   r!   g        r   r  specialbookingyesr   Npickupaddressdropaddressr  r  rq  rr  ro  )r  r  rq  rr  rs  zdistance found in DistanceTablez#distance not found in DistanceTablern  )r{  r|  r   i  z1Please select same country for pickup and dropoff)r  r   F)rs  r   Bikez/static/images/bike.pngCarz/static/images/car.jpgz	Small Vanz/static/images/smallvan.pngz
Medium Vanz	Large Vanz/static/images/largevan.jpgrx   )r  priceimagecurrencyr  r  r   r.  rN  )re  rf  r   )r   zSpecial Booking Charges)r  r   zSuccess.)r  r   r   extrachargescurrent_creditsi  zInternal Server Error)&r   r   r   typery  loadsr   r   rw  r   rz  r$   r%   r&   r   r   r  countr  r  r  r   r  WEB_BASE_URLr  r  r  r   r  r   r   r   r   rh  CompanyDetailrP  r  r  ))r   r   r   r   r  r  r  noofparcels_valtotal_pricer%  r   noofparcels_forspecialbookingparcelr   pickupaddress_valdropaddress_valsenderlatitude_valsenderlongitude_valrecipientlatitude_valrecipientlongitude_valr  r   r{  r|  r  r   r  vehicle_countr  vehicler  r  itemr  rA  rB  r   companydetail_objr  specialbookingchargesr  ru   ru   rv   r   d  s    "










$

zGetFaresTest.postN)r   r   r   r   ru   ru   ru   rv   ri  b  s   ri  c                   s    e Zd ZdZ fddZ  ZS )PlaceOrderTest3zplaceorder_test3.htmlc                s  t t| jf |}td tjj }||d< g }|jddd |jddd |jdd	d |jd
dd t| ||d< g }tjj	dd}|rx0|D ](}|j|j
jd|jjd|jd qW ||d< | jjjdr| jjd }| jjjdr| jjd }	g }
tjj	|dj }|rztjj	|d}|rzd}x>|D ]6}|d7 }|
j||j|jd |j |j|jd q@W |
|d< d|d< |S )z4This function passes arguments to place order page. zPlaceOrderTest3 - in get allparceltypesr   zLess than 5 kg)r   weightrx   z"More than 5 kg but less than 20 kgr   z#More than 20 kg but less than 50 kgr   zMore than 50 kgallparcelweightsT)activez%I:%M %p)openinghourclosinghourr   alltimeslotsr   r.  )r   )r   r   rH  )rI  rJ  rK  r>  r  rL  r  placeorder_section)r   r  r   r   
ParcelTyper$   allr  	TimeSlotsr%   r  rY  r  r  r   r   r   r   r&   r#  r;  r<  r=  r>  r   )r   r   r   r  r   timeslots_datar  slotrA  rB  rL  r   r*  rI  r8  )r   ru   rv   r     sb    








z PlaceOrderTest3.get_context_data)r   r   r   r   r   r   ru   ru   )r   rv   r    s   r  c             C   s*   t jj| d}|r"| d } t| S | S d S )N)priorityBaseIDForParcelr   )r   r$   r%   prorityandChecking)proritycheckinru   ru   rv   r  T  s
    r  c                   s(   e Zd ZdZ fddZdd Z  ZS )PlaceOrderTest2NEWzplaceorder_test2.htmlc          	      s>  g }| j jjdr| j jd }t| tjj|dj }td tjj|dj }|rt	jj|d}x0|D ](}|j
|j|j|j|j|j|jd qjW tt| jf |}td tjj }	|	|d< g }
|
j
d	d
d |
j
ddd |
j
ddd |
j
ddd t|
 |
|d< g }tjjdd}|rbx2|D ]*}|j
|jjd|jjd|jd q4W ddlm} |j }|jd}dd l}|j|jd}|j}|dkrt d}nt |d	 }|jd)}t| |d }|j!|d }|jd+}t| |d d! d | }t| ||d"< ||d#< ||d$< d%|d&< ||d'< |S ),Nr   )r   2)r   )r   )recipientnamerecipientcountrycoderecipientphonerq  rr  dropoffaddresszPlaceOrderTest2 - in get r  r   zLess than 5 kg)r   r  rx   z"More than 5 kg but less than 20 kgr   z#More than 20 kg but less than 50 kgr   zMore than 50 kgr  T)r  z%I:%M %p)r  r  r   r   )datetimez%m/%d/%YzEurope/Londonr   z%I:00r|   z%pz:00z%H:%Mr   currentHourZ	todayDater  r  r  ZrecipientDetailsz%I:00 z%I:00 %pz%I:00 z%I:00 %p)"r   r   r   r   r	   r$   r%   r&   r   r   r  r  r  r  rq  rr  r  r   r  r   r  r  r  r  rY  r  r  r  nowpytztimezonehourr   strptime)r   r   profile_datarA  r   r   r   r   r   r  r   r  r  r  ZdtofNewZ	dateofoneZdateofTodayNewZpyNewcurrent_timer  ZnewfirstDateZnewHourd2ZnewsecondDateZcurrenttimeSlot)r   ru   rv   r   `  s    













z#PlaceOrderTest2NEW.get_context_datac       C      O   s  t d t d t d dd }dfdd}|jjd}|jjd	}|jjd
}|jjd}	|jjd}
|jjd}t|
jddg }
y| jjjdr(| jjd }t | tj	j
|dj }t d tj	j
|dj }t d |r(|	dkrd}	n|	dkrd}	ntdddS tj	j||	t|
dd}W n, tk
rV } zt | W Y dd}~X nX t d t t| tj|}t d t |
 |r ydt | ttjt_tjjtt|
d  d!d"|d#}t | tj	j|t||jt|jd  d$ W n. tk
r } zt d%| W Y dd}~X nX d}t d yBtj	j }|rlt|j d&kr^t|j d' }nt|j d }W n$ tk
r } zW Y dd}~X nX | jjjdr| jjd }t | tj	j
|dj }t d tj	j
|dj }t d |rt d( x|D ]}t d) t d) t |d*  t |d+  t |d,  t |d-  t |d.  t |d/  t |d0  t |d1  t |d2  t |d3  t |d4  t |d5  t |d6  t |d7  t d8|d9  t |d:  t d;|d<  |d< }t|}|d* }|d+ }|d, }|d= }|d> }|d- }|d. }|d? }|d/ }|d0 } |d1 }!|d2 }"|d3 }#|d@ }$|d4 }%|d5 }&|d6 }'|d7 }(|dA })|dB }*|dC }+|dD },|d: }-|dE }.|dF }/|/dGkrdH}0nd}0|-dGkrdH}1nd}1t!j	j
|dIj }2|2rt dJ yt"j	j
|||+|,dKdLj }3|3r|3j#}4|4|2j$krD|2j%}5nr|2j%}5t d) t |2j& t |5 |4|2j$ }4|4t|4krt|4d }4n|4}4t |4 t |2j' |5|4|2j'  }5t |5 W n, tk
r } zt | W Y dd}~X nX y,dM}6|0rt(j	j
dNdIj }7|7r|7j)}6W n, tk
r> } zt | W Y dd}~X nX d&dOl*m*}8 |d9 }9|8j+|9dP}:|:j, };|;j-dQ}<t |< tj	j }|j.}=|=d }=t/|=}=tj	j||||||||#|%|&|'|(|||| |!|"||2|5|)|*|0|6|||1|<|$|=dR}>|r
||>_0||>_1|+|>_2|,|>_3|>j4  yt*j*j5 }?t6j	j|>|?dS W n, tk
rT } zt | W Y dd}~X nX y6t7j	j|>jdHdTdUdVdW t7j	j||>jdHdTdXdVdY W n, tk
r } zt | W Y dd}~X nX yt8|j9dZd[d\d] W n, tk
r } zt | W Y dd}~X nX |.r&|.}@t d^ ||@|>jd_ t d` y||>jd_ t d` W n, tk
rj } zt | W Y dd}~X nX yt:|>j}At |A W n, tk
r } zt | W Y dd}~X nX qW ntddadS ntddadS tj	j j}Btdbdc|BddS )hzTThis function is being used to save the customer job request details in the databasez

zPlaceOrderTest2 Web - in postc       	      S   s   t |  dd l}dd l}dd l}tjj| d}djdd tdD }t	t
jd t	|j }|jj|rln|jd |j| |jdt	|  d	}|j|d
 dd dt	|j d
 }||_|j  dS )Nr   )r   r}   c             S   s   g | ]}t jtjtj qS ru   )randomchoicestringascii_lettersdigits).0nru   ru   rv   
<listcomp>  s    zCPlaceOrderTest2NEW.post.<locals>.generateqrcode.<locals>.<listcomp>r   z/media/CustomerJobs/zAWB-)contentz/qrcode.pngr   )scaler!   )r   pyqrcodepngosr   r$   r   joinranger   r   BASE_DIRr   pathexistsumaskmkdirr(   qrcoderq   )	id_valr  r  r  r   stfilepathr}  filenameru   ru   rv   generateqrcode  s    

z/PlaceOrderTest2NEW.post.<locals>.generateqrcodec:\c                sp  t | | jd}|d }|jd}t|d }|d }tj|}t|}ddlm}	 dd ldd l	dd l
|	j|}
tjj|d}djfdd	td
D }tjj }ttjd t|j  jj r fdd	j D }x"|D ]}j| qW n
j  |	j|}
|
jddg|	j}|
j d d | }dt|j d d | }||_|j  dS )Nz;base64,r   rH  r   )r   )r   r}   c                s   g | ]} j jj qS ru   )r  r  r  )r  r  )r  r  ru   rv   r    s    zFPlaceOrderTest2NEW.post.<locals>.getI420FromBase64.<locals>.<listcomp>r   z/media/CustomerJobs/c                s   g | ]}j j |qS ru   )r  r  )r  f)r  r  ru   rv   r    s    i  zparcelimage.r!   )r   r   r   base64	b64decoder   PILr   r  r  r  openr   r$   r   r  r  ThumbnailSizer  r   r  r   r  r  listdirremover  	thumbnail	ANTIALIASrq   r  )codecr  
image_pathbase64_dataextensext	extension	byte_data
image_datar   imgr   r  thumbnailsize_objsfilesToRemover  imr  ru   )r  r  r  r  rv   getI420FromBase64  s6    







z2PlaceOrderTest2NEW.post.<locals>.getI420FromBase64r  r  payment_token	ordertypetotalamountr  r|   r   r   )r   r  )r   3
singledrop	multidroprx   i  zOrder type is required.)r  r   F)r   r  r  r   Nr"   r!   d   gbpzParcel Payment)amountr  descriptionr:  )orderstripe_charge_responsestripe_charge_idstripe_amountzException in creating charge = r   i  4r  
sendernamesendercountrycodesenderphoner  
sendercitywidthheightr  
parceltypespecialnoter  r  r  r  zSelected Date For parcel pickupdt
safePalacezNo of items in one parcel	noofitemsr  r  lengthdropspecialnoter   r   rq  rr  imagebase64r  r  T)r  5ro  )r  r  rq  rr  rs  g        zSpecial Booking Charges)r  z%m/%d/%Yz%d-%b-%Y)r
  r  r  r  r  r  r  pickupspecialnoter  r  r  r  deliverydurationr  r  r  r  r  r   r  r  r   r   r  specialbooking_charger   no_of_item_in_parceldeliverySafePlacer   dropoffspecialnoter  )r  payment_datetimezParcel Job Createdz"You have created one parcel order.unread)customerjobidforcustomernotificationtypenotificationtextr   z&Customer has created one parcel order.)r   r&  foradminr(  r)  r   r   r  KwickDeliveryz*Your parcel details are saved successfullyzbefore function call)r  zafter function callzUser not logged in.r   zSuccess.)r  r   customerjob_idzsuccess.)r  );r   r   r   r   r   r   r   r   r	   r$   r%   r&   r   r   Orderr(   r   r   r  ry  r  r   r?  r$  r%  Charger   OrderPaymentr   r  r   lastr   r  rz  r   r  r  r  r  r  r  r  r  rR  rY  r  r  r  r  rq  rr  rq   r  CustomerJobDateTimeNotificationsr   fcmtokenr   )Cr   r   r   r   r  r  r  r  r   r  r  r  rA  r   r   	order_objr   chargedeliveryduration_vallast_customer_objsameIdForStoringr  r  sendername_valsendercountrycode_valsenderphone_valr  r  r  sendercity_val
length_val	width_val
height_val
weight_valparceltype_valspecialnote_valr  recipientname_valrecipientcountrycode_valrecipientphone_valr  pickuptimeslot_valdropofftimeslot_valr  r  ZsafePalace_valimagebase64_valspecialbooking_valr  r  r  r  r   r  r   r  ZdateuforZdatetime_strZdatetime_objectdat1dat2prorityIdforParcelr   current_dater  r   lastcustomerjobidru   ru   rv   r     s   
"

(








J

"zPlaceOrderTest2NEW.post)r   r   r   r   r   r   r   ru   ru   )r   rv   r  ]  s   \r  c                   s(   e Zd ZdZ fddZdd Z  ZS )PlaceOrderTest2zplaceorder_test2.htmlc                s   t t| jf |}td tjj }||d< g }|jddd |jddd |jdd	d |jd
dd t| ||d< g }tjj	dd}|rx0|D ](}|j|j
jd|jjd|jd qW ||d< d|d< |S )z4This function passes arguments to place order page. zPlaceOrderTest2 - in get r  r   zLess than 5 kg)r   r  rx   z"More than 5 kg but less than 20 kgr   z#More than 20 kg but less than 50 kgr   zMore than 50 kgr  T)r  z%I:%M %p)r  r  r   r  r  r  )r   rP  r   r   r  r$   r  r  r  r%   r  rY  r  r  )r   r   r   r  r   r  r  r  )r   ru   rv   r     s<    







z PlaceOrderTest2.get_context_datac       7      O   s  t d t d t d dd }d[dd}|jjd}|jjd	}|jjd
}|jjd}	|jjd}
|jjd}t|
jdd\ }
y| jjjdr(| jjd }t | tj	j
|dj }t d tj	j
|dj }t d |r(|	dkrd}	n|	dkrd}	ntdddS tj	j||	t|
dd}W n, tk
rV } zt | W Y dd}~X nX t d t t| tj|}t d t |
 |r ydt | ttjt_tjjtt|
d  d!d"|d#}t | tj	j|t||jt|jd  d$ W n. tk
r } zt d%| W Y dd}~X nX d}t d | jjjdr| jjd }t | tj	j
|dj }t d tj	j
|dj }t d |rt d& x|D ]}t d' t d' t |d(  t |d)  t |d*  t |d+  t |d,  t |d-  t |d.  t |d/  t |d0  t |d1  t |d2  t |d3  t |d4  t |d5  |d( }|d) }|d* }|d6 }|d7 }|d+ }|d, }|d8 }|d- }|d. }|d/ }|d0 }|d1 } |d2 }!|d3 }"|d4 }#|d5 }$|d9 }%|d: }&|d; }'|d< }(|d= })|d> }*|*d?kr d@}+nd}+tj	j
|dAj },|,rt dB ytj	j
|||'|(dCdDj }-|-r|-j }.|.|,j!kr|,j"}/nr|,j"}/t d' t |,j# t |/ |.|,j! }.|.t|.krt|.d }.n|.}.t |. t |,j$ |/|.|,j$  }/t |/ W n, tk
r  } zt | W Y dd}~X nX y,dE}0|+rLt%j	j
dFdAj }1|1rL|1j&}0W n, tk
rz } zt | W Y dd}~X nX t'j	j|||||||| |!|"|#|$||||||||,|/|%|&|+|0dG}2|r||2_(||2_)|'|2_*|(|2_+|2j,  yt-j-j. }3t/j	j|2|3dH W n, tk
r* } zt | W Y dd}~X nX y6t0j	j|2jd@dIdJdKdL t0j	j||2jd@dIdMdKdN W n, tk
r } zt | W Y dd}~X nX yt1|j2dOdPdQdR W n, tk
r } zt | W Y dd}~X nX |)r|)}4t dS ||4|2jdT t dU y||2jdT t dU W n, tk
r@ } zt | W Y dd}~X nX yt3|2j}5t |5 W n, tk
r } zt | W Y dd}~X nX qW ntddVdS ntddVdS t'j	j4 j}6tdWdX|6dYS )]zTThis function is being used to save the customer job request details in the databasez

zPlaceOrderTest2 Web - in postc       	      S   s   t |  dd l}dd l}dd l}tjj| d}djdd tdD }t	t
jd t	|j }|jj|rln|jd |j| |jdt	|  d	}|j|d
 dd dt	|j d
 }||_|j  dS )Nr   )r   r}   c             S   s   g | ]}t jtjtj qS ru   )r  r  r  r  r  )r  r  ru   ru   rv   r  %  s    z@PlaceOrderTest2.post.<locals>.generateqrcode.<locals>.<listcomp>r   z/media/CustomerJobs/zAWB-)r  z/qrcode.pngr   )r  r!   )r   r  r  r  r   r$   r   r  r  r   r   r  r   r  r  r  r  r(   r  rq   )	r  r  r  r  r   r  r  r}  r  ru   ru   rv   r     s    

z,PlaceOrderTest2.post.<locals>.generateqrcodec:\c                sp  t | | jd}|d }|jd}t|d }|d }tj|}t|}ddlm}	 dd ldd l	dd l
|	j|}
tjj|d}djfdd	td
D }tjj }ttjd t|j  jj r fdd	j D }x"|D ]}j| qW n
j  |	j|}
|
jddg|	j}|
j d d | }dt|j d d | }||_|j  dS )Nz;base64,r   rH  r   )r   )r   r}   c                s   g | ]} j jj qS ru   )r  r  r  )r  r  )r  r  ru   rv   r  C  s    zCPlaceOrderTest2.post.<locals>.getI420FromBase64.<locals>.<listcomp>r   z/media/CustomerJobs/c                s   g | ]}j j |qS ru   )r  r  )r  r  )r  r  ru   rv   r  G  s    i  zparcelimage.r!   )r   r   r   r  r  r   r  r   r  r  r  r  r   r$   r   r  r  r  r  r   r  r   r  r  r  r  r  r  r  rq   r  )r  r  r  r  r  r  r  r  r  r   r  r   r  r  r  r  r  r  ru   )r  r  r  r  rv   r  6  s6    







z/PlaceOrderTest2.post.<locals>.getI420FromBase64r  r  r   r  r  r  r|   r   r   )r   r  )r   r  r  r  rx   i  zOrder type is required.)r  r   F)r   r  r  r   Nr"   r!   r  r  zParcel Payment)r  r  r	  r:  )r
  r  r  r  zException in creating charge = r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   rq  rr  r  r  r  T)r  r  ro  )r  r  rq  rr  rs  g        zSpecial Booking Charges)r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r   r   r  r   )r  r$  zParcel Job Createdz"You have created one parcel order.r%  )r&  r'  r(  r)  r   z&Customer has created one parcel order.)r   r&  r*  r(  r)  r   r   r  r+  z*Your parcel details are saved successfullyzbefore function call)r  zafter function callzUser not logged in.r   zSuccess.)r  r   r,  zsuccess.)rQ  r-  )5r   r   r   r   r   r   r   r   r	   r$   r%   r&   r   r   r.  r(   r   r   r  ry  r  r   r?  r$  r%  r/  r   r0  r   r  r  rz  r   r  r  r  r  r  r  r   r  r  rq  rr  rq   r  r  r2  r3  r   r4  r   r1  )7r   r   r   r   r  r  r  r  r   r  r  r  rA  r   r   r5  r   r6  r7  r  r:  r;  r<  r  r  r  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  r  rG  rH  r  r  rI  rJ  r  r  r  r   r  r   r  r   rN  r  r   rO  ru   ru   rv   r     s\   
"

(




>

"zPlaceOrderTest2.post)r   r   r   r   r   r   r   ru   ru   )r   rv   rP    s   *rP  c                   s(   e Zd ZdZ fddZdd Z  ZS )CompanyPlaceOrderzcompany_placeorder.htmlc                s   t t| jf |}td tjj }||d< g }|jddd |jddd |jdd	d |jd
dd t| ||d< g }tjj	dd}|rx0|D ](}|j|j
jd|jjd|jd qW ||d< d|d< |S )z4This function passes arguments to place order page. zCompanyPlaceOrder - in get r  r   zLess than 5 kg)r   r  rx   z"More than 5 kg but less than 20 kgr   z#More than 20 kg but less than 50 kgr   zMore than 50 kgr  T)r  z%I:%M %p)r  r  r   r  r  r  )r   rR  r   r   r  r$   r  r  r  r%   r  rY  r  r  )r   r   r   r  r   r  r  r  )r   ru   rv   r   (  s<    







z"CompanyPlaceOrder.get_context_datac       G      O   s  t d t d t d dd }ddd}|jjd}|jjd	}|jjd
}|jjd}	|jjd}
|jjd}t|jdd }|jjd}t|jdd }y| jjjdr| jjd }t | tj	j
|dj }t d tj	j
|dj }t d |rtj	j
|jdj }|r>|jt| dk r>tdddS |	dkrNd}	n|	dkr^d}	ntdddS tj	j||	t|d d!}W n, tk
r } zt | W Y d"d"}~X nX t d# t t| tj|}t d$ t | |r~ydt | ttjt_tjjtt|d% d&d'|d(}t | tj	j|t||jt|j d% d) W n. tk
rz } zt d*| W Y d"d"}~X nX ntj	j
|jdj }|r|jt| dkr| jt|8  _|j!  tj	j|d+t|d,}|rt d- ntdd.dS ntdd/dS ntdd/dS d}t d# yBt"j	j# }|rft|j$d0krXt|j$d1 }nt|j$d }W n$ tk
r } zW Y d"d"}~X nX | jjjd	r| jjd }t | tj	j
|dj }t d tj	j
|dj }t d |rt d2 x|D ]}t d3 t d3 t |d4  t |d5  t |d6  t |d7  t |d8  t |d9  t |d:  t |d;  t |d<  t |d=  t |d>  t |d?  t |d@  t |dA  |d4 }|d5 }|d6 }|dB }|dC }|d7 }|d8 }|dD } |d9 }!|d: }"|d; }#|d< }$|d= }%|d> }&|d? }'|d@ }(|dA })|dE }*|dF }+|dG },|dH }-|dI }.|dJ }/|/dKkrdL}0nd }0t%j	j
|
dMj }1|1rt dN yt&j	j
|||,|-dOdPj }2|2rT|2j'}3|3|1j(kr|1j)}4nr|1j)}4t d3 t |1j* t |4 |3|1j( }3|3t|3kr(t|3d }3n|3}3t |3 t |1j+ |4|3|1j+  }4t |4 W n, tk
r } zt | W Y d"d"}~X nX y,d}5|0rt,j	j
dQdMj }6|6r|6j-}5W n, tk
r } zt | W Y d"d"}~X nX t"j	j||||||||%|&|'|(|)|| |!|"|#|$||1|4|*|+|0|5|dR}7|rD||7_.||7_/|,|7_0|-|7_1|7j!  yt2j2j3 }8t4j	j|7|8dS W n, tk
r } zt | W Y d"d"}~X nX y6t5j	j|7jdLdTdUdVdW t5j	j||7jdLdTdXdVdY W n, tk
r } zt | W Y d"d"}~X nX yt6|j7dZd[d\d] W n, tk
r6 } zt | W Y d"d"}~X nX |.r`|.}9t d^ ||9|7jd_ t d` y||7jd_ t d` W n, tk
r } zt | W Y d"d"}~X nX yt8|7j}:t |: W n, tk
r } zt | W Y d"d"}~X nX qW ntddadS ntddadS t"j	j# j};tdbdc|;ddS |	s@tddldS |	sTtddmdS |	shtddndS |	s|tddodS |	stddpdS |	stddqdS |$	stddrdS |&	stddsdS |'	stddtdS |(	stddudS |)
stddvdS |>
stddwdS |?
s0tddxdS |
ry>t | ttj tjjtt|?d% dyd'|d(}t | W n. tk

r } zt d*| W Y d"d"}~X nX d}t d# t9j	j
|<dzj }@t d$ |@rt d |@j:}Atj	j
|Ad{j }t d |rt d2 t%j	j
|>dMj }1|1rt dN t"j	j|||||||%|&|'|(|)||!|"|#|$||1|?d|}7|r~||7_.||7_/|,|7_0|-|7_1|7j!  y8t5j	j|7jdLdTdUdVdW t5j	j|@j;|7jdLdTdXdVdY W n, tk
r } zt | W Y d"d"}~X nX yt6|j7dZd[d\d] W n, tk
r& } zt | W Y d"d"}~X nX |.rTd}|. }9t d^ ||9|7jd_ t d` y||7jd_ t d` W n, tk
r } zt | W Y d"d"}~X nX tdbdc|7jddS ntddadS td~ddS |<stddadS t9j	j
 }@tj	j
|dj }|rtj	j
|dLdj }|rt<j	j
dt=dj# }B|Br|Bj>}C|Bj?}Dt |C t |D ttj@}Et2j2j3tAjB|E}Ft |F |F|Ckr|F|Dk rdL|B_C|Bj!  tdbddS td0ddS ntd0ddS ntd0ddS ntddadS W n4 tk
r } zt | td~ddS d"}~X nX d"S )zTThis function is being used to save the customer job request details in the databasez

zPlaceOrderTest2 Web - in postc       	      S   s   t |  dd l}dd l}dd l}tjj| d}djdd tdD }t	t
jd t	|j }|jj|rln|jd |j| |jdt	|  d	}|j|d
 dd dt	|j d
 }||_|j  dS )Nr   )r   r}   c             S   s   g | ]}t jtjtj qS ru   )r  r  r  r  r  )r  r  ru   ru   rv   r  `  s    zBCompanyPlaceOrder.post.<locals>.generateqrcode.<locals>.<listcomp>r   z/media/CustomerJobs/zAWB-)r  z/qrcode.pngr   )r  r!   )r   r  r  r  r   r$   r   r  r  r   r   r  r   r  r  r  r  r(   r  rq   )	r  r  r  r  r   r  r  r}  r  ru   ru   rv   r  [  s    

z.CompanyPlaceOrder.post.<locals>.generateqrcodec:\c                sp  t | | jd}|d }|jd}t|d }|d }tj|}t|}ddlm}	 dd ldd l	dd l
|	j|}
tjj|d}djfdd	td
D }tjj }ttjd t|j  jj r fdd	j D }x"|D ]}j| qW n
j  |	j|}
|
jddg|	j}|
j d d | }dt|j d d | }||_|j  dS )Nz;base64,r   rH  r   )r   )r   r}   c                s   g | ]} j jj qS ru   )r  r  r  )r  r  )r  r  ru   rv   r  ~  s    zECompanyPlaceOrder.post.<locals>.getI420FromBase64.<locals>.<listcomp>r   z/media/CustomerJobs/c                s   g | ]}j j |qS ru   )r  r  )r  r  )r  r  ru   rv   r    s    i  zparcelimage.r!   )r   r   r   r  r  r   r  r   r  r  r  r  r   r$   r   r  r  r  r  r   r  r   r  r  r  r  r  r  r  rq   r  )r  r  r  r  r  r  r  r  r  r   r  r   r  r  r  r  r  r  ru   )r  r  r  r  rv   r  q  s6    







z1CompanyPlaceOrder.post.<locals>.getI420FromBase64r  r  r   r  r  r  r|   r   credits_to_be_usedr   )r   r  )r   r  )customer__emailg        i  zzYou have insufficient credits to book this parcel. Please request credits from profile section or place order select card.)r  r   r  r  rx   i  zOrder type is required.F)r   r  r  r   Nr"   r!   r  r  zParcel Payment)r  r  r	  r:  )r
  r  r  r  zException in creating charge = rP  )r
  methodrT  zcredits payment successzInternal Server Error.z_You have insufficient credits to book this parcel. Please request credits from profile section.r   i  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   rq  rr  r  r  r  T)r  r  ro  )r  r  rq  rr  rs  zSpecial Booking Charges)r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r   r   r  r   r   )r  r$  zParcel Job Createdz"You have created one parcel order.r%  )r&  r'  r(  r)  r   z&Customer has created one parcel order.)r   r&  r*  r(  r)  r   r   r  r+  z*Your parcel details are saved successfullyzbefore function call)r  zafter function callzUser not logged in.r   zSuccess.)r  r   r,  zHow are you?zsuccess.c       	      S   s   t |  dd l}dd l}dd l}tjj| d}djdd tdD }t	t
jd t	|j }|jj|rln
|j| |jdt	|  d	}|j|d
 dd dt	|j d
 }||_|j  dS )Nr   )r   r}   c             S   s   g | ]}t jtjtj qS ru   )r  r  r  r  r  )r  r  ru   ru   rv   r    s    zBCompanyPlaceOrder.post.<locals>.generateqrcode.<locals>.<listcomp>r   z/media/CustomerJobs/zAWB-)r  z/qrcode.pngr   )r  r!   )r   r  r  r  r   r$   r   r  r  r   r   r  r   r  r  r  r(   r  rq   )	r  r  r  r  r   r  r  r}  r  ru   ru   rv   r    s    
c                sp  t | | jd}|d }|jd}t|d }|d }tj|}t|}ddlm}	 dd ldd l	dd l
|	j|}
tjj|d}djfdd	td
D }tjj }ttjd t|j  jj r fdd	j D }x"|D ]}j| qW n
j  |	j|}
|
jddg|	j}|
j d d | }dt|j d d | }||_|j  dS )Nz;base64,r   rH  r   )r   )r   r}   c                s   g | ]} j jj qS ru   )r  r  r  )r  r  )r  r  ru   rv   r    s    zECompanyPlaceOrder.post.<locals>.getI420FromBase64.<locals>.<listcomp>r   z/media/CustomerJobs/c                s   g | ]}j j |qS ru   )r  r  )r  r  )r  r  ru   rv   r    s    i  zparcelimage.r!   )r   r   r   r  r  r   r  r   r  r  r  r  r   r$   r   r  r  r  r  r   r  r   r  r  r  r  r  r  r  rq   r  )r  r  r  r  r  r  r  r  r  r   r  r   r  r  r  r  r  r  ru   )r  r  r  r  rv   r    s6    







session_tokenrecipientspecialnoter  zsendername_val is requiredzSender countrycode is requiredz"Sender senderphone_val is requiredzpickupaddress_val is requiredzsendercity_val is requiredznoofparcels_val is requiredzparceltype_val is requiredzrecipientname_val is requiredz!recipient countrycode is requiredzrecipientphone_val is requiredzdropaddress_val is requiredzvehicletype_val is requiredzprice_val is requiredeur)r  )user__id)r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  zdata:image/png;base64,i  zInternal Server Errorzraheja@yopmail.com)username)r   accountapprovedsignup)caseotpzUser registered successfully.zOTP has expired 1zInvalid OTPzCustomer exists.i  )rS  r-  r-  )Dr   r   r   r   r   r   r   r   r	   r$   r%   r&   r   r  r   rP  r   r   r.  r(   r   r  ry  r  r   r?  r$  r%  r/  r   r0  r   r  rq   r   r1  r   r  rz  r   r  r  r  r  r  r  r  r  rq  rr  r  r  r2  r3  r   r4  r   r
   user_idr   OTPotp_valstartdatetimeexpiredatetime	TIME_ZONEr  r  verified)Gr   r   r   r   r  r  r  r  r   r  r  r  rT  rA  r   r   r  r5  r   r6  orderpayment_objr7  r8  r9  r  r:  r;  r<  r  r  r  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  r  rG  rH  r  r  rI  rJ  r  r  r  r   r  r   r  r   rN  r  r   rO  session_token_valrecipientspecialnote_valr  	price_val	token_objr`  otp_objst_timeex_timer  rt  ru   ru   rv   r   R  s   
"


(






@

"     !                           
2   

zCompanyPlaceOrder.post)r   r   r   r   r   r   r   ru   ru   )r   rv   rR  %  s   *rR  c               @   s   e Zd ZdZdd ZdS )PlaceOrderTestzQThis class is being used to save the customer job request details in the databasec       4   Q   O   s
  t d t d t d dd }dkdd}|jjd}|jjd	}|jjd
}|jjd}	t d t t| tj|}t d d}
x0|D ](}t d |
t|d 7 }
t |d  qW t |
 |	r4y@t |	 ttj	t
_t
jjtt|
d dd|	d}t | W n. tk
r2 } zt d| W Y d d }~X nX d}t d | jjjdr| jjd }t | tjj|dj }t d tjj|dj }t d |rt d xR|D ]8}t d t d t |d  t |d  t |d  t |d   t |d!  t |d"  t |d#  t |d$  t |d%  t |d&  t |d'  t |d(  t |d)  t |d*  |d }|d }|d }|d+ }|d, }|d  }|d! }|d" }|d# }|d$ }|d% }|d& }|d' }|d( }|d) } |d* }!|d- }"|d. }#|d/ }$|d }%|d0 }&tjj|$d1j }'|'rt d2 tjj|||||||||| |!|||||||'|%d3}(|r||(_||(_|"|(_|#|(_|(j  y6tjj|(j d4d5d6d7d8 tjj||(j d4d5d9d7d: W n, tk
r } zt | W Y d d }~X nX yt!|j"d;d<d=d> W n, tk
r2 } zt | W Y d d }~X nX |&r\|&})t d? ||)|(j d@ t dA y||(j d@ t dA W n, tk
r } zt | W Y d d }~X nX yt#|(j }*t |* W n, tk
r } zt | W Y d d }~X nX qW nt$dBdCdDS nt$dBdCdDS tjj% j }+t$dEdF|+dGS |s<t$dBdMdDS |sPt$dBdNdDS |sdt$dBdOdDS |sxt$dBdPdDS |st$dBdQdDS |st$dBdRdDS |st$dBdSdDS |st$dBdTdDS |st$dBdUdDS | st$dBdVdDS |!st$dBdWdDS |$st$dBdXdDS |%s,t$dBdYdDS |	ry>t |	 ttj	 t
jjtt|%d dZd|	d}t | W n. tk
r } zt d| W Y d d }~X nX d}t d t&jj|d[j }-t d |-rt d |-j'}.tjj|.d\j }t d |rt d tjj|$d1j }'|'rt d2 tjj|||||||||| |!|||||||'|%d3}(|rz||(_||(_|"|(_|#|(_|(j  y8tjj|(j d4d5d6d7d8 tjj|-j(|(j d4d5d9d7d: W n, tk
r } zt | W Y d d }~X nX yt!|j"d;d<d=d> W n, tk
r" } zt | W Y d d }~X nX |&rPd]|& })t d? ||)|(j d@ t dA y||(j d@ t dA W n, tk
r } zt | W Y d d }~X nX t$dEdF|(j dGS nt$dBdCdDS t$d^d_dDS |st$dBdCdDS t&jj }-tjj|daj }|	rtjj|d4dbj }|	rt)jjdct*ddj% }/|/	r|/j+}0|/j,}1t |0 t |1 ttj-}2t.j.j/t0j1|2}3t |3 |3|0k	r|3|1k 	rd4|/_2|/j  t$dEdedDS t$dfdgdDS nt$dfdhdDS nt$dfdidDS nt$djdCdDS W n4 tk

r } zt | t$d^d_dDS d }~X nX d S )lNz

zPlaceOrderTest Web - in postc       	      S   s   t |  dd l}dd l}dd l}tjj| d}djdd tdD }t	t
jd t	|j }|jj|rln|jd |j| |jdt	|  d	}|j|d
 dd dt	|j d
 }||_|j  dS )Nr   )r   r}   c             S   s   g | ]}t jtjtj qS ru   )r  r  r  r  r  )r  r  ru   ru   rv   r  v	  s    z?PlaceOrderTest.post.<locals>.generateqrcode.<locals>.<listcomp>r   z/media/CustomerJobs/zAWB-)r  z/qrcode.pngr   )r  r!   )r   r  r  r  r   r$   r   r  r  r   r   r  r   r  r  r  r  r(   r  rq   )	r  r  r  r  r   r  r  r}  r  ru   ru   rv   r  q	  s    

z+PlaceOrderTest.post.<locals>.generateqrcodec:\c                sp  t | | jd}|d }|jd}t|d }|d }tj|}t|}ddlm}	 dd ldd l	dd l
|	j|}
tjj|d}djfdd	td
D }tjj }ttjd t|j  jj r fdd	j D }x"|D ]}j| qW n
j  |	j|}
|
jddg|	j}|
j d d | }dt|j d d | }||_|j  dS )Nz;base64,r   rH  r   )r   )r   r}   c                s   g | ]} j jj qS ru   )r  r  r  )r  r  )r  r  ru   rv   r  	  s    zBPlaceOrderTest.post.<locals>.getI420FromBase64.<locals>.<listcomp>r   z/media/CustomerJobs/c                s   g | ]}j j |qS ru   )r  r  )r  r  )r  r  ru   rv   r  	  s    i  zparcelimage.r!   )r   r   r   r  r  r   r  r   r  r  r  r  r   r$   r   r  r  r  r  r   r  r   r  r  r  r  r  r  r  rq   r  )r  r  r  r  r  r  r  r  r  r   r  r   r  r  r  r  r  r  ru   )r  r  r  r  rv   r  	  s6    







z.PlaceOrderTest.post.<locals>.getI420FromBase64rW  r  r  r   r"   r!   g        r  r  r  r  zParcel Payment)r  r  r	  r:  zException in creating charge = r   r   )r   r  )r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rq  rr  r  r  )r  r  )r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  TzParcel Job Createdz"You have created one parcel order.r%  )r&  r'  r(  r)  r   z&Customer has created one parcel order.)r   r&  r*  r(  r)  r   r   r  r+  z*Your parcel details are saved successfullyzbefore function call)r  zafter function calli  zUser not logged in.)r  r   r   zSuccess.)r  r   r,  zHow are you?zsuccess.c       	      S   s   t |  dd l}dd l}dd l}tjj| d}djdd tdD }t	t
jd t	|j }|jj|rln
|j| |jdt	|  d	}|j|d
 dd dt	|j d
 }||_|j  dS )Nr   )r   r}   c             S   s   g | ]}t jtjtj qS ru   )r  r  r  r  r  )r  r  ru   ru   rv   r  7
  s    z?PlaceOrderTest.post.<locals>.generateqrcode.<locals>.<listcomp>r   z/media/CustomerJobs/zAWB-)r  z/qrcode.pngr   )r  r!   )r   r  r  r  r   r$   r   r  r  r   r   r  r   r  r  r  r(   r  rq   )	r  r  r  r  r   r  r  r}  r  ru   ru   rv   r  2
  s    
c                sp  t | | jd}|d }|jd}t|d }|d }tj|}t|}ddlm}	 dd ldd l	dd l
|	j|}
tjj|d}djfdd	td
D }tjj }ttjd t|j  jj r fdd	j D }x"|D ]}j| qW n
j  |	j|}
|
jddg|	j}|
j d d | }dt|j d d | }||_|j  dS )Nz;base64,r   rH  r   )r   )r   r}   c                s   g | ]} j jj qS ru   )r  r  r  )r  r  )r  r  ru   rv   r  T
  s    zBPlaceOrderTest.post.<locals>.getI420FromBase64.<locals>.<listcomp>r   z/media/CustomerJobs/c                s   g | ]}j j |qS ru   )r  r  )r  r  )r  r  ru   rv   r  X
  s    i  zparcelimage.r!   )r   r   r   r  r  r   r  r   r  r  r  r  r   r$   r   r  r  r  r  r   r  r   r  r  r  r  r  r  r  rq   r  )r  r  r  r  r  r  r  r  r  r   r  r   r  r  r  r  r  r  ru   )r  r  r  r  rv   r  G
  s6    







rX  zsendername_val is requiredzSender countrycode is requiredz"Sender senderphone_val is requiredzpickupaddress_val is requiredzsendercity_val is requiredznoofparcels_val is requiredzparceltype_val is requiredzrecipientname_val is requiredz!recipient countrycode is requiredzrecipientphone_val is requiredzdropaddress_val is requiredzvehicletype_val is requiredzprice_val is requiredrY  )r  )rZ  zdata:image/png;base64,i  zInternal Server Errorzraheja@yopmail.com)r[  )r   r\  r]  )r^  r_  zUser registered successfully.r   zOTP has expired 1zInvalid OTPzCustomer exists.i  )rp  )3r   r   r   r  ry  r  r   r   r   r?  r$  r%  r/  r(   r   r   r   r   r   r	   r$   r%   r&   r   r  r   r  r  rq  rr  rq   r3  r   r   r4  r   r   r1  r
   r`  r   ra  rb  rc  rd  re  r  r  r  r  rf  )4r   r   r   r   r  r  rh  r  r  r   Z
totalpricer  r6  r   r7  rA  r   r   r:  r;  r<  r  r  r  r=  r?  r@  rA  rB  rC  rD  rE  rF  r  r  r  r  rj  rI  r  r   r  r   rO  ri  rk  r`  rl  rm  rn  r  rt  ru   ru   rv   r   i	  s   
!

2
"     !                           
2   

zPlaceOrderTest.postN)r   r   r   __doc__r   ru   ru   ru   rv   ro  f	  s   ro  c               @   s   e Zd Zdd ZdS )ContactFormc       
      O   s.  t d t d t d|j y|jjd}|jjd}|jjd}|sTtddd	S |sftdd
d	S |sxtddd	S d| d }||d | 7 }y2t | td|ddgdd}t | tddd	S  tk
r }	 zt |	 W Y d d }	~	X nX W n4 tk
r( }	 zt |	 tddd	S d }	~	X nX d S )Nz



zContactForm - post zdata is  : r  r   messagei  zPlease enter name)r  r   zPlease enter emailzPlease enter messagezThere is a message from r  z : zContact Form:ztmpython4esf@gmail.comztest@yopmail.comF)fail_silentlyr   zRequest sent.i  zInternal Server Error)r   r   r   r   r   r   )
r   r   r   r   name_valrA  message_valrs  r   r   ru   ru   rv   r     s2    zContactForm.postN)r   r   r   r   ru   ru   ru   rv   rr    s   rr  c                   s(   e Zd ZdZ fddZdd Z  ZS )QuickFareEstimatezcustomer_quickfareestimate.htmlc                s^   t t| jf |}td g }tjjdd}|rRx |D ]}|j|j|j	d q6W ||d< |S )z<This function shows the content on customer dashboard screenzQuickFareEstimate - in get F)r   )r  r  allvehicletypes)
r   rw  r   r   r  r$   r%   r  r   r  )r   r   r   r   rx  r  )r   ru   rv   r   A  s    
z"QuickFareEstimate.get_context_datac             O   s  yft d dd }dd }t |j |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 tjj|||
|ddj }|rt d |j}nFt d |||	|||
|d\}}}t ||| |dkr$t||dS |||d\}}}t ||| |dkr\t|||dS t||dS  t	k
r } zt d| tdddS d }~X nX d S )NzQuickFareEstimate API - in postc             S   s  yt tj}| jdd} | jdd} |jdd}|jdd}| }|}d}	|r|r|r|r|d | }
|d | }t|	d |
 d | d |  tj|	d |
 d | d | }nBt|	d | d | d |  tj|	d | d | d | }|j }t| td	 |d
 dkrd}t|d d d d d d | }t	|||||d|d d d d d d d}|j
  dd|fS dS W n* tk
r } zt| dS d }~X nX d S )Nr|   r}   #z9https://maps.googleapis.com/maps/api/distancematrix/json?rn  zorigins=z&destinations=z&key=r  r   rj  gobyp\D?rk  r   rl  r   rm  ro  rp  )r  r  rq  rr  r   rs  rt  r   r	    Enter valid address)rz  r{  r}   )rz  r{  r}   )r   r   rw  r   r   rx  r   ry  r   rz  rq   r   )r  r  r  r  r  r  r%  r:  destr}  r{  r|  r   r~  r  r  r  r   ru   ru   rv   r  T  s:    
 $ "$.
z>QuickFareEstimate.post.<locals>.getdistancebetweentwolocationsc             S   s\  g }y t jjd|dj }|r| }||jkr8|j}n<|j}||j }|t|krbt|d }n|}|||j  }d}|jdkrt	t
jd }nf|jdkrt	t
jd }nL|jd	krt	t
jd
 }n2|jdkrt	t
jd
 }n|jdkrt	t
jd }|j|jt	tt|d|j|d dd|fS  tk
rV } zt| dd|fS d }~X nX d S )Nro  )rs  r  r   r}   r  z/static/images/bike.pngr  z/static/images/car.jpgz	Small Vanz/static/images/smallvan.pngz
Medium Vanz	Large Vanz/static/images/largevan.jpgrx   )r  r  r  r  r   r	  i  zEnter valid address)r  r$   r%   r&   r  r  r   r  r  r   r   r  r  r  r   r  r   r   )r  r  r   r  r   r  r  r   ru   ru   rv   r    s:    






&
zGQuickFareEstimate.post.<locals>.calculatefarefromdistanceforvehicletyper  r  r  r  rq  rr  r  i  zpickupaddress is required)r  r   zdropaddress is requiredzvehicletype is requiredro  )r  r  rq  rr  rs  zdistance found in DistanceTablez#distance not found in DistanceTable)r  r  r  r  r  r  r   )r  r  )r  r   r   zerror isi  zInternal Server Error)
r   r   r   r   rz  r$   r%   r&   r   r   )r   r   r   r   r  r  r  r  r  r  r  r  r  r  r   r  r   r   errorru   ru   rv   r   P  sF    +f



zQuickFareEstimate.post)r   r   r   r   r   r   r   ru   ru   )r   rv   rw  >  s   rw  c                   s    e Zd ZdZ fddZ  ZS )CustomerNotificationszcustomer_notifications.htmlc                s|  t t| jf |}td | jjjdrx| jjd }tjj	|dj
 }|rxg }tjj	|djd}|rxd}xB|D ]:}|d7 }|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
rP   |	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CustomerNotifications - in get r   )r   )r   z-idr   r   )	rI  r   r'  r(  r)  r   rR  r&  r"  r   rS  zpage = tryrT  rU  all_notificationsr   r.  read)r   ) r   r~  r   r   r   r   r   r	   r$   r%   r&   r3  r  r  r   r'  r(  r)  r   rR  r&  r"  r   r   rZ  r   rS  r  r[  r\  r]  update)r   r   r   rA  r   notifications_datar  rI  notificationra  rS  )r   ru   rv   r     sN    



z&CustomerNotifications.get_context_data)r   r   r   r   r   r   ru   ru   )r   rv   r~    s   r~  c                   s(   e Zd ZdZdd Z fddZ  ZS )CustomerJobRaiseTicketzcustomerjobraiseticket.htmlc             O   s   t d t d t |j y|jjd}|jjd}tjj|dj }|rbtjj||j	|dd n8t d tjj|d}|rt d	 tjj||j	|dd t
d
ddS  tk
r } zt | t
dddS d }~X nX d S )Nz!CustomerJobRaiseTicket - in post z

r&  complaintmessage)r,  T)disputemessagethreadr   rs  fromuserzin elseifr   r	  )r  r   i  zInternal server error.)r   r   r   DisputeMessageThreadModelr$   r%   r&   DisputeMessageModelr(   r   r   r   )r   r   r   r   r&  r  disputemessagethreadmodel_objr   ru   ru   rv   r   D  s$    
zCustomerJobRaiseTicket.postc       
         s   t t| jf |}| 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	 }|rtjj|d}	|	r|	|d< t|d  ||d< |S )Nr   )r   )r   r&  )r,  )r  Zdisputemessage)r   r  r   r   r   r   r	   r$   r%   r&   r   r   r  r  )
r   r   r   r   r   r   r   r&  r  Zdisputemessagemodel_obj)r   ru   rv   r   [  s$    z'CustomerJobRaiseTicket.get_context_data)r   r   r   r   r   r   r   ru   ru   )r   rv   r  B  s   r  c                   s(   e Zd ZdZdd Z fddZ  ZS )CustomerJobDetailzcustomerjobdetail.htmlc             O   s   d S )Nru   )r   r   r   r   ru   ru   rv   r   r  s    zCustomerJobDetail.postc       (   M      sN  t t| jf |}| jjjdrJ| jjd }i }tjj|dj	 }|rJt
jj|dj	 }|rJ|d }t| tjj||dj	 }|rJ|jsd}	n|j}	|jsd}
n|j}
|jsd}nttj|jj }|jrttj|jj }nd}d}|jr
ttj|jj }|j|j }tjj|dj	 }d\}}}}|rR|j}|j}|j}|j}d}d\}}}}d\}}}}tjj|dj	 }|rHd	}|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r<|j$}|j'}|jd |j( }n|j$}|j%}d}i }yPt)jj|dj	 } | rt*jj|| dj	 }!|!rd	}|j+|!j,j|!j-d W n, t.k
r }" zt|" W Y d d }"~"X nX d}#i }$y<t/jj|ddj	 }%|%rd	}#|$j+|%j0j|%j|%j1d W n, t.k
r> }" zt|" W Y d d }"~"X nX d}&i }'t)jj|dj	 } | r|'j+| j2j| j2j3| j2j4| j2j5| j5d d	}&|j+|j5|j'|j6j7j8|	|j(|j9|j:|j;|j"|
|j#|j<|j=|j>|j?|j@|jA|jB|j|jCj|j|j|||||j5dtd|j5  |&|'|||||||||||||#|$|||jDd/ ||d< t|d  |S )Nr   )r   )r   r&  )r   r   r}   )r  FT	signaturer_  r   )r   )r   
driver_job)r  dateandTime)r  r   )r  r  reason)
drivernamedrivercountrycodedriverphoner   driverjobidzAWB-i'  )/r   r  senderemailr  r  r  senderpickupaddressr   r  r  r  recipientdropoffaddressr   r  r  r  r  r  r  r  r  r   r  parcelimageparcelpdf_linkr  r&  	awbnumberdriverexistdriverdetailsdelivery_proof_methoddelivery_toperson_namedelivery_toperson_phonedelivery_toperson_signaturepickup_proof_methodpickup_fromperson_namepickup_fromperson_phonepickup_fromperson_signaturepickup_datetimeitemsdelivered_datetimer$  dataLoggingdeliveryIsFailedOrNot
failedDatadeliveryonSafePalaceorNotsafePalaceDeliverDatar   r   )r}   r}   r}   r}   )r}   r}   r}   r}   )r}   r}   r}   r}   )Er   r  r   r   r   r   r	   r$   r%   r&   r   r   r   r  r  r  r   r   MEDIA_BASE_URLr  	parcelpdfr  r  r  r   r2  r$  r  r  deliveryfailed_datetimeCustomerJobDeliveryExtraDetailsr  r  r  r  r  r  r  r  r  r  r   DriverDropSafePalacer  	safeplacerX  r   CustomerJobDeliveryFaileddeliveryfailed_imagedeliveryfailurereasonr    countrycodephoner   r   r   r   r  r  r   r  r   r  r  r  r  r  r  r   )(r   r   r   r   r   r   r   r&  r   r  r  r  r  r  r  customerjobdatetime_objr$  r  r  r  r  r  r  r  r  r  r  r  r  #customerjobdeliveryextradetails_objr  r  driverjob_objSafePalaceObjectr   r  r  deliveryFailedr  driverjob_data)r   ru   rv   r   v  s"   

z"CustomerJobDetail.get_context_data)r   r   r   r   r   r   r   ru   ru   )r   rv   r  p  s   r  c                   s(   e Zd ZdZdd Z fddZ  ZS )CustomerJobDetailExtraTestzcustomerjobdetail.htmlc             O   s   d S )Nru   )r   r   r   r   ru   ru   rv   r   $  s    zCustomerJobDetailExtraTest.postc       "   .      sd  t t| jf |}| jjjdr`| jjd }g }tjj|dj	 }|r`t
jj|dj	 }|r`|d }t| tjj||d}|r`x|D ]}	i }
|	jsd}n|	j}|	jsd}n|	j}|	jsd}nttj|	jj }|	jrttj|	jj }nd}d}|	jrttj|	jj }|	j|	j }tjj|	dj	 }d\}}}}|r`|j}|j}|j}|j}d\}}}}d\}}}}tjj|	dj	 }|rN|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rB|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 )Nr   )r   )r   r&  )r   r   r}   )r  r  r_  r   F)r   )r  r  r  r   r  TzAWB-i'  )+r   r  r  r  r  r  r  r   r  r  r  r  r   r  r  r  r  r  r  r  r  r   r  r  r  r  r&  r  r  r  r  r  r  r  r  r  r  r  r  r#  r  r  r$  customerjoball)r}   r}   r}   r}   )r}   r}   r}   r}   )r}   r}   r}   r}   )@r   r  r   r   r   r   r	   r$   r%   r&   r   r   r   r  r  r  r   r   r  r  r  r  r  r  r   r2  r$  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r    r  r  r   r   r   r   r  r  r   r  r   r  r  r  r  r  r  r  r#  r  )"r   r   r   r   allDatar   r   r&  customerjob_objallr   r   r  r  r  r  r  r  r  r$  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )r   ru   rv   r   (  s    
z+CustomerJobDetailExtraTest.get_context_data)r   r   r   r   r   r   r   ru   ru   )r   rv   r  "  s   r  c               @   s   e Zd Zdd ZdS )CustomerProfileUpdatec             C   s  t d yd"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
}|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||	_||	_||	_|	j  |r8|}
||
|	jd}t | |dkr| jjjd}| jjjd}| jjjd}| jjjd}| jjjd}| jjjd}tjj	|	d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 )#z1This function shows the content on profile screenzCustomerProfileUpdate - in get c:\c                s  t | t d | jd}|d }|jd}t|d }|d }tj|}t|}ddlm}	 dd ldd l	dd l
|	j|}
tjj|d}djfd	d
tdD }tjj }ttjd t|j d t|jj  jj r" fdd
j D }x$|D ]}j| qW n
j  xl|D ]d}|	j|}
|
jt|jt|j g|	j!}|
j" d t|j d t|j  d | d | }q2W |	j|}
|
j" d | d |  dt|j d t|jj d | d | }||_#|j"  dS )Nz

z;base64,r   rH  r   )r   )r   r}   c                s   g | ]} j jj qS ru   )r  r  r  )r  r  )r  r  ru   rv   r    s    zICustomerProfileUpdate.post.<locals>.getI420FromBase64.<locals>.<listcomp>r   z/media/Users/Customers/_c                s   g | ]}j j |qS ru   )r  r  )r  r  )r  r  ru   rv   r    s    r   r   .z
/original-r!   )$r   r   r   r  r  r   r  r   r  r  r  r  r   r$   r   r  r  r  r  r   r  r   r   r   r  r  r  r  makedirsr  r   r  r  r  rq   r  )r  r  r  r  r  r  r  r  r  r   r  r   r  r  r  r  objr  r  ru   )r  r  r  r  rv   r    s>    




(



<
.z5CustomerProfileUpdate.post.<locals>.getI420FromBase64r   r.  
customeridr  r  r  i  zCustomer Id is required)r  r   zName is requiredzEmail Address is requiredzPhone is required)r   )r  rN  	job_titlecompany_namecompany_websitemonthly_delivery_volumeregistration_numberindustry)r   )r  r  websiter  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  rq   r   r  r  r   )r   r   r  rA  rB  customerid_valru  	phone_val	image_valr   r  r   r  r  r  r  r  r  r  r   ru   ru   rv   r     sX    
%
 zCustomerProfileUpdate.postN)r   r   r   r   ru   ru   ru   rv   r    s   r  c               @   s   e Zd Zdd ZdS )CompanyProfileUpdatec       
      C   sN  t d y
i }| jjjdr*| jjd }| jjjdrD| jjd }| jjjd}| jjjd}| jjjd}| jjjd}|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||_||_||_|j  tddd	S tddd	S W n4 tk
rH }	 zt |	 tddd	S d}	~	X nX dS )z1This function shows the content on profile screenzCustomerProfileUpdate - in get r   r.  r  r  r  i  zCustomer Id is required)r  r   zName is requiredzEmail Address is requiredzPhone is required)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  rq   r   )
r   r   r   rA  rB  r  ru  r  r   r   ru   ru   rv   r     s<    zCompanyProfileUpdate.postN)r   r   r   r   ru   ru   ru   rv   r    s   r  c                   s    e Zd ZdZ fddZ  ZS )CustomerProfilezcustomer_profile.htmlc                s  t t| jf |}td | jjjdr@| jjd }| jjd }tjj	|dj
 }td |rtd tjj	|djdj
 }|r|d	kri }tjj	|d
j
 }|r|j|j|j|j|j|j|j|jd ||d< td i }	yXddlm}
 tjj	d|jdj|
d}t| t|d  |d s2d}n|d }W n0 tk
rl } zt| d}W Y dd}~X nX |jrttj|jj }nd}|	j|j |j|j!|j"|||jd |	|d< t|	 d|d< |S )z1This function shows the content on profile screenzCustomerProfile - in get r   r.  )r   r"   r!   )r   r   rN  )r   )r  r  r  r  r  r  rP  companydetail_datar  r   )Avgr   )	ratingforr  ratingrating__avgg        Nr}   )r.  r  r   r  r  ratingsr   r  profile_section)#r   r  r   r   r   r   r   r	   r$   r%   r&   r   rh  r  r  r  r  r  r  r  r  rP  django.db.modelsr  
UserRatingr   	aggregater   r  r   r   r  rf  r   r  )r   r   r   rA  rB  r   r   r  r  customer_datar  rating_customerr  r   r  )r   ru   rv   r   9  sh    
z CustomerProfile.get_context_data)r   r   r   r   r   r   ru   ru   )r   rv   r  5  s   r  c                   s    e Zd ZdZ fddZ  ZS )CompanyProfilezcompany_profile.htmlc                s   t t| jf |}td | jjjdr4| jjd }tjj	|dj
 }|rvtjj	|djdj
 }|rv||d< d|d< d|d	< |S )
z;This function shows the content on company dashboard screenzCompanyProfile - in get r   )r   )r   r   rN  r.  r  r  )r   r  r   r   r   r   r   r	   r$   r%   r&   Companyrh  )r   r   r   rA  r   company_obj)r   ru   rv   r   |  s    zCompanyProfile.get_context_data)r   r   r   r   r   r   ru   ru   )r   rv   r  x  s   r  c               @   s   e Zd Zdd ZdS )	ResendOTPc             O   sf  t d y"|jjd}|s*tdddS |jjd}|sHtdddS d|krXd| }|jjd	}|svtdd
dS d}d}x*tdD ]}	||tjtj d  7 }qW tjj	 }
tjj	 t
dd }d}tjj|| |dj }|r|
|_||_||_|j  ntjj|| |||
|d}tdddS  tk
r` } zt | tdddS d}~X nX dS )z/This function is used to resend OTP to the userzWeb - in resend_otp functionr   r   zEmail Address is required)r  r   r  zCountrycode is required+r  zPhone number is required
0123456789r}   r   r   r   )minutesr]  )mobiler^  )r  r^  r_  rc  rd  r   zOTP sent on phone.zInternal Server ErrorN)r   r   r   r   r  r  floorr  r  r  r   ra  r$   r%   r&   rc  rd  r_  rq   r(   r   )r   r   r   r   rA  countrycode_valr  r  r_  r  
start_timeexpire_timer^  rl  r   ru   ru   rv   r     s>    

zResendOTP.postN)r   r   r   r   ru   ru   ru   rv   r    s   r  c               @   s   e Zd Zdd ZdS )GetFaresc       #      O   s  yPt d t d t |j t d |jjd}|jjd}|jjd}|jjd}|jjd}|jjd}	|jjd	}
|jjd
}|jjd}|jjd}|jjd}|jjd}|jjd}|jjd}|jjd}|jjd}|stdddS |stdddS |s tdddS |s4tdddS |	sHtdddS |
s\tdddS |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 g }yHd }|jd!d"}|jd#d"}|jd!d"}|jd#d"}|}|}d$}t | t |d% | d& | d' |  tj|d% | d& | d' | }|j }t | t d( |d) d*krd+}t|d, d- d. d- d/ d0 | }t | tj	j
d1d2d3}|rxJ|D ]0}|}||jkr|j} nz|j} t d( t |j t |  ||j }t | |t|kr2t|d4 }n|}t | t |j | ||j  } t |  ttj}!|jd5kr~|!d67 }!nV|jd7kr|!d87 }!n@|jd9kr|!d:7 }!n*|jd;kr|!d:7 }!n|jd<kr|!d=7 }!|j|jttt| d>|!d? qW ntdd@dS W n4 tk
rB }" zt |" tdd@dS dA}"~"X nX tdBdC|dDS  tk
r }" zt |" tdEdFdS dA}"~"X nX dAS )GzPThis function is being used to return fares according to different vehicle typeszGetFares Web- in post z

rW  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  i  zsendername_val is required)r  r   zSender countrycode is requiredzSender phone number is requiredzpickupaddress_val is requiredzsendercity_val is requiredznoofparcels_val is requiredzparceltype_val is requiredzrecipientname_val is requiredz!recipient countrycode is requiredzrecipientphone_val is requiredzdropaddress_val is required'AIzaSyCZt3wR3ItaSSmIhWnRy4hy6FnqmEM81oYr|   r}   ry  z9https://maps.googleapis.com/maps/api/distancematrix/json?zorigins=z&destinations=z&key=r  r   rj  gobyp\D?rk  r   rl  r   rm  ro  F)rs  r   r   r  z/static/images/bike.pngr  z/static/images/car.jpgsmallvanz/static/images/smallvan.png	mediumvanlargevanz/static/images/largevan.jpgrx   )r  r  r  zEnter valid addressNr   zSuccess.)r  r   r   i  zInternal Server Error)r   r   r   r   r   rx  ry  r   r  r$   r%   r  r  r  r   r  r   r   r  r  r  r   )#r   r   r   r   rh  r:  r;  r<  r  r=  r  r?  r@  rA  rB  rC  rD  rE  rF  r  r   r%  r:  r|  r}  r   r~  r  r  r  r  r   r  r  r   ru   ru   rv   r     s    
 "$







*zGetFares.postN)r   r   r   r   ru   ru   ru   rv   r    s   r  c                   s(   e Zd ZdZ fddZdd Z  ZS )
PlaceOrderzplaceorder.htmlc                s@   t t| jf |}td tjj }||d< t| d|d< |S )z4This function passes arguments to place order page. zPlaceOrder - in get r  r  r  )r   r  r   r   r  r$   r  )r   r   r   r  )r   ru   rv   r   H  s    
zPlaceOrder.get_context_datac       )   '   O   s  t d yt |j dd }dVdd}|jjd}|jjd}|jjd	}|jjd
}	|jjd}
|jjd}|jjd}|jjd}|jjd}|jjd}|jjd}|jjd}|jjd}|jjd}|jjd}|jjd}|jjd}|jjd}|jjd}|s tdddS |s4tdddS |	sHtdd dS |
s\tdd!dS |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 |stdd'dS |stdd(dS |stdd)dS |stdd*dS dd+l}t d, tt|d- }ttj	|_
|jj|d.d/|d0}t | |j}|j}|jj}t d1 |d2 d3 d4 }t | |d5krd6}n|d7krd8}|d2 d3 d9 } t d:|  d:  d;}!t d< | jjjd=rv| jjd= }"t |" tjj|"d>j }#|#rtjj|#d?j }$t d@ |$rt dA tjj|dBj }%|%rt dC tjj|||	|
||||||||!|||||$|%|dD}&y6tjj|&jdEdFdGdHdI tjj|#|&jdEdFdJdHdK W n, tk
r }' zt |' W Y d+d+}'~'X nX |rdL| }(t dM ||(|&jdN t dO y||&jdN t dO W n, tk
r` }' zt |' W Y d+d+}'~'X nX tdPdQ|&jdRS ntddSdS tdTdUdS  tk
r }' zt |' tdTdUdS d+}'~'X nX d+S )WzTThis function is being used to save the customer job request details in the databasezPlaceOrder Web - in postc       	      S   s   t |  dd l}dd l}dd l}tjj| d}djdd tdD }t	t
jd t	|j }|jj|rln
|j| |jdt	|  d	}|j|d
 dd dt	|j d
 }||_|j  dS )Nr   )r   r}   c             S   s   g | ]}t jtjtj qS ru   )r  r  r  r  r  )r  r  ru   ru   rv   r  ]  s    z;PlaceOrder.post.<locals>.generateqrcode.<locals>.<listcomp>r   z/media/CustomerJobs/zAWB-)r  z/qrcode.pngr   )r  r!   )r   r  r  r  r   r$   r   r  r  r   r   r  r   r  r  r  r(   r  rq   )	r  r  r  r  r   r  r  r}  r  ru   ru   rv   r  X  s    
z'PlaceOrder.post.<locals>.generateqrcodec:\c                sp  t | | jd}|d }|jd}t|d }|d }tj|}t|}ddlm}	 dd ldd l	dd l
|	j|}
tjj|d}djfdd	td
D }tjj }ttjd t|j  jj r fdd	j D }x"|D ]}j| qW n
j  |	j|}
|
jddg|	j}|
j d d | }dt|j d d | }||_|j  dS )Nz;base64,r   rH  r   )r   )r   r}   c                s   g | ]} j jj qS ru   )r  r  r  )r  r  )r  r  ru   rv   r  |  s    z>PlaceOrder.post.<locals>.getI420FromBase64.<locals>.<listcomp>r   z/media/CustomerJobs/c                s   g | ]}j j |qS ru   )r  r  )r  r  )r  r  ru   rv   r    s    i  zparcelimage.r!   )r   r   r   r  r  r   r  r   r  r  r  r  r   r$   r   r  r  r  r  r   r  r   r  r  r  r  r  r  r  rq   r  )r  r  r  r  r  r  r  r  r  r   r  r   r  r  r  r  r  r  ru   )r  r  r  r  rv   r  o  s6    







z*PlaceOrder.post.<locals>.getI420FromBase64r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   zpayment_token Empty)r   rs  i  zsendername_val is required)r  r   z"Sender senderphone_val is requiredzpickupaddress_val is requiredzsendercity_val is requiredznoofparcels_val is requiredzparceltype_val is requiredzrecipientname_val is requiredz!recipient countrycode is requiredzrecipientphone_val is requiredzdropaddress_val is requiredzvehicletype_val is requiredzprice_val is requiredNr  r  rY  zParcel Payment)r  r  r	  r:  r!   Zpayment_method_detailsr8  ZfundingZcreditzCredit CardZdebitz
Debit Cardr9  z



r   r"   r   )r   )r   r  r  )r  r  )r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  TzParcel Job Createdz"You have created one parcel order.r%  )r&  r'  r(  r)  r   z&Customer has created one parcel order.)r   r&  r*  r(  r)  r   zdata:image/png;base64,zbefore function call)r  zafter function callr   zSuccess.)r  r   r,  zUser not logged in.i  zInternal Server Error)r  )r   r   r   r   r$  r   r   r   r   r?  r%  r/  r(   r   receipt_urlZrefundsr}  r   r   r   r	   r$   r%   r&   r   r  r   r3  r   ))r   r   r   r   r  r  r   r:  r;  r<  r  r=  r  r?  r@  rA  rB  rC  rD  rE  rF  r  r  rj  rI  r$  Zpaymentamount_valr6  Z
payment_idr  refunds_urlpayment_methodZlastfourdigitsr7  rA  r   r   r  r   r   r  ru   ru   rv   r   R  s    

"

2zPlaceOrder.post)r   r   r   r   r   r   r   ru   ru   )r   rv   r  D  s   
r  c                   s    e Zd ZdZ fddZ  ZS )MyJobszmyjobs.htmlc                s   t t| jf |}td td | jjjdr| jjd }t| tjj	|dj
 }|rtjj	|djd}|r||d< t| td d|d	< |S )
z<This function shows the content on all customer jobs by userzMyJobs - in get z


r   )r   )r   z-idall_customerjobsr  myjobs_section)r   r  r   r   r   r   r   r   r$   r%   r&   r   r  )r   r   r   rA  r   r   )r   ru   rv   r      s    zMyJobs.get_context_data)r   r   r   r   r   r   ru   ru   )r   rv   r    s   r  c       	      C   s  t | j | jjd}tjj|dj }g }|rtjj|djd}|rt t	| x|D ]}ydt
d|j  }W n. tk
r } zt | d}W Y d d }~X nX |jsd}nt
tj|jj }|j|j|jj|j|j|j|j|j|||jd
 t | q^W td	|iS )
Norder_id)r   )r
  z-idzAWB-i'  r}   )
r   r   r  r  r  r  r  r  r  r&  Zall_parcels_data)r   r   r   r.  r$   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  
order_datar   r  r  r   r  ru   ru   rv   get_all_parcels3  s<    

r  c                   s    e Zd ZdZ fddZ  ZS )MyJobsOngoingExtraTestzmyjobs_test.htmlc                 s  t t| jf |}td td g }| jjjdr| jjd }t| tjj	|dj
 }|rg }tjj	|ddjd}|rڐxT|D ]J}g }	tjj	||djd}
|
rtt|
  x|
D ]}|j|kr|jdkr|j|j d	}yd
td|j  }W n0 tk
r0 } zt| d}W Y dd}~X nX |js@d}nttj|jj }|jdkrdd}n|jdkrvd}nd}|	j|j||j|j|j|j|j|j|j|||j|j|jd qW |j|	 t|	 t| qW ||d< d|d< td d|d< |S )z<This function shows the content on all customer jobs by userz MyJobsOngoingExtraTest - in get z


r   )r   r   )r   r   z-id)r
  r   FzAWB-i'  r}   Nr   zSingle-Droprx   z
Multi-Drop)orderidr  r   r   r  r  r  r  r  r  r  r&  r"  extraIdongoingcustomerjobs_datazOngoing Jobs	page_namer  r  ) r   r  r   r   r   r   r   r   r$   r%   r&   r.  r  r   r  r   r  r   r   r   r  r   r  r  r  r   r  r  r  r  r  r   )r   r   r   r   rA  r   unique_parcel_idsr5  r
  r  r   r  	completedr  r   r  r  )r   ru   rv   r   ]  st    


z'MyJobsOngoingExtraTest.get_context_data)r   r   r   r   r   r   ru   ru   )r   rv   r  Y  s   r  c                   s    e Zd ZdZ fddZ  ZS )MyJobsOngoingTestzmyjobs_test.htmlc                s  t t| jf |}td td g }| jjjdr| jjd }t| tjj	|dj
 }|rtjj	|ddjd}|rx|D ]}g }tjj	||djd}	|	rtt|	 x|	D ]}
yd	td
|
j  }W n0 tk
r } zt| d}W Y dd}~X nX |
jsd}nttj|
jj }|jdkr<d}n|jdkrNd}nd}|j|j||
j|j|
j|
j|
j|
j|
j|||
jd qW |j| qW ||d< d|d< td d|d< |S )z<This function shows the content on all customer jobs by userzMyJobsOngoingTest - in get z


r   )r   r   )r   r   z-id)r
  r   zAWB-i'  r}   Nr   zSingle-Droprx   z
Multi-Drop)r  r  r   r   r  r  r  r  r  r  r  r&  r   zOngoing Jobsr  r  r  )r   r  r   r   r   r   r   r   r$   r%   r&   r.  r  r   r  r   r   r   r  r   r  r  r  r  r   r  r  r  r  r  )r   r   r   r   rA  r   r5  r
  r  r   r  r  r   r  r  )r   ru   rv   r     sb    
z"MyJobsOngoingTest.get_context_data)r   r   r   r   r   r   ru   ru   )r   rv   r    s   r  c                   s    e Zd ZdZ fddZ  ZS )MyJobsOngoingzmyjobs.htmlc       	         s   t t| jf |}td td g }| jjjdr| jjd }t| tjj	|dj
 }|rtjj	|djd}|rxp|D ]h}|jrttj|jj }nd}|j|j|j|j|jjj|j|j|j|j||jd
 ||d	< d
|d< q|W td d|d< |S )z<This function shows the content on all customer jobs by userzMyJobsOngoing - in get z


r   )r   )r   z-idr}   )
r   r   r  r  r  r  r  r  r  r&  r  zOngoing Jobsr  r  r  )r   r  r   r   r   r   r   r   r$   r%   r&   r   r  r  r   r   r  r  r  r   r   r  r   r   r  r  r  r  )	r   r   r   r   rA  r   r   r   r  )r   ru   rv   r     s>    
zMyJobsOngoing.get_context_data)r   r   r   r   r   r   ru   ru   )r   rv   r    s   r  c                   s    e Zd ZdZ fddZ  ZS )MyJobsCompletedzmyjobs.htmlc       
         s  t t| jf |}td td g }| jjjdr
| jjd }t| tjj	|dj
 }|r
tjj	|djd}|r
x|D ]}tjj	|dj
 }|r|jr|jrttj|jj }	nd}	|j|j|j|j|jjj|j|j|j|j|	|jd	
 ||d
< d|d< qW td d|d< |S )z<This function shows the content on all customer jobs by userzMyJobsCompleted - in get z


r   )r   )r   z-id)r   r}   )
r   r   r  r  r  r  r  r  r  r&  r  zCompleted Jobsr  r  r  )r   r  r   r   r   r   r   r   r$   r%   r&   r   r  r   jobcompletedr  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   ru   rv   r     sD    
z MyJobsCompleted.get_context_data)r   r   r   r   r   r   ru   ru   )r   rv   r    s   r  c                   s    e Zd ZdZ fddZ  ZS )MyJobsCompletedExtraTestzmyjobs.htmlc                s  t t| jf |}td td g }| jjjdr| jjd }t| tjj	|dj
 }g }|rtjj	|djd}|rx>|D ]4}|j|kr|jdkr|j|j d}	|jdkrtjj	|jd	}
d}d}|
rd
}d
}	x |
D ]}|jdkrd}	|j}qW |jdkrBtjj	|dj
 }
d}d}|
rBd
}|
jrBd
}	d
}|jdkrVd}|
r|	r|jrzttj|jj }nd}|j|j|j|j|jjj|j|j|j|j|||jt|jd qW ||d< d|d< t| td d|d< |S )z<This function shows the content on all customer jobs by userz"MyJobsCompletedExtraTest - in get z


r   )r   )r   z-idr   F)sameIdForParcelsT)r   r}   )r   r   r  r  r  r  r  r  r  showIdr  r&  r  zCompleted Jobsr  r  r  ) r   r  r   r   r   r   r   r   r$   r%   r&   r   r  r   r  r   r  r	  r  r   r   r  r  r   r   r  r   r   r  r  r  r  )r   r   r   r   rA  r   r  r   r   r  r  r  rr   r   Showr  )r   ru   rv   r   A  s~    




z)MyJobsCompletedExtraTest.get_context_data)r   r   r   r   r   r   ru   ru   )r   rv   r  =  s   r  c                   s    e Zd ZdZ fddZ  ZS )CustomerDashboardzcustomer_dashboard.htmlc                s   t t| jf |}td | jjjdr4| jjd }tjj	|dj
 }|rtjj	|djdj
 }|r||d< d|d< tjj	|djd	d
d }||d< d|d< |S )z<This function shows the content on customer dashboard screenzCustomerDashboard - in get r   )r   )r   r   r   r.  )r   z-idNr   recent_customerjobsr  dashboard_section)r   r  r   r   r   r   r   r	   r$   r%   r&   r   rh  r   r  )r   r   r   rA  r   r   r  )r   ru   rv   r     s    z"CustomerDashboard.get_context_data)r   r   r   r   r   r   ru   ru   )r   rv   r    s   r  c                   s    e Zd ZdZ fddZ  ZS )CompanyDashboardzcompany_dashboard.htmlc                s   t t| jf |}td | jjjdr4| jjd }tjj	|dj
 }|rvtjj	|djdj
 }|rv||d< d|d< d|d	< |S )
z;This function shows the content on company dashboard screenzCompanyDashboard - in get r   )r   )r   r   rN  r.  r  r  )r   r  r   r   r   r   r   r	   r$   r%   r&   r  rh  )r   r   r   rA  r   r  )r   ru   rv   r     s    z!CompanyDashboard.get_context_data)r   r   r   r   r   r   ru   ru   )r   rv   r    s   r  c               @   s   e Zd Zdd ZdS )UserVerificationsc       	      C   s  t d t d t d | jjjdr2| jjd }t| jj}|jdd }i }|dkrltjj	|dj
 }n>|dkrtjj	|dj
 }d	}n|d
krtjj	|dj
 }d}|rd|_|j  |dkrd}n |dkrd	}n|d
krd}nd}|j|jd< ||jd< tt|S tt|S d S )Nz

zUserverification - in getr   rH  rx   r   )emailverificationlinkrN  zcompany-dashboardr    )forgot_password_linkzdriver-dashboardTzcustomer-loginr.  )r   r   r   r   r   r  r   r   r$   r%   r&   r  r#   emailverifiedrq   r   r   r   )	r   r   r   linkr.  r   r   urlnameurl_valru   ru   rv   r     s<    
zUserVerifications.getN)r   r   r   r   ru   ru   ru   rv   r    s   r  c                   s(   e Zd ZdZ fddZdd Z  ZS )CustomerVerifyForgotPasswordzverify_forgot_password.htmlc       	         s   t t| jf |}i }t| jj}|jdd }|jdd }|jdd }tjj	|dj
 }|dksn|dkrtjj	||dj
 }|rd|d	< qd
|d	< nd
|d	< t|d	  |S )NrH  r   rx   )r   r   rN  )r   r  T
user_existFr-  r   )r   r  r   r   r   r  r   r	   r$   r%   r&   r   r   )	r   r   r   r  
ran_string
user_emailr.  r   r   )r   ru   rv   r     s    

z-CustomerVerifyForgotPassword.get_context_datac             O   s   i }|j d }|j d }|j d }|jdd }|jdd }	tjj|	dj }
tjj|
|dj }|r|
j| |
j  d	|d
< d|d< nd|d
< d|d< t	t
j|S )Nr   	conf_passlink_urlrH  r   rx   )r   )r   r  Tr	  r   r  Fr-  r   )r   r   r	   r$   r%   r&   r   set_passwordrq   r   ry  dumps)r   r   r   r   r   password
c_passwordr  r  r  r   r   ru   ru   rv   r     s     




z!CustomerVerifyForgotPassword.post)r   r   r   r   r   r   r   ru   ru   )r   rv   r    s   r  c               @   s    e Zd ZdZdd Zdd ZdS )VerifyForgotPasswordzverify_forgot_password.htmlc             O   s   i }t | jj}t| |jdd
 }tjj|dj }t	jj||dj }|rbtd d|d< ntd d	|d< t|d  |S )NrH  rx   )r   )r   r  TrueTr  FalseFr   )
r   r   r  r   r   r	   r$   r%   r&   r#   )r   r   r   r   r  r  r   rs   ru   ru   rv   r   
  s    
z%VerifyForgotPassword.get_context_datac             O   s   i }|j d }|j d }|j d }|jdd }|jdd }	tjj|	dj }
tjj|
|dj }|r|
j| |
j  d	|d
< d|d< nd|d
< d|d< t	t
j|S )Nr   r  r  rH  r   rx   )r   )r   r  Tr	  r   r  Fr-  r   )r   r   r	   r$   r%   r&   r#   r  rq   r   ry  r  )r   r   r   r   r   r  r   r  r  r  r   rs   ru   ru   rv   r     s     




zVerifyForgotPassword.postN)r   r   r   r   r   r   ru   ru   ru   rv   r!    s   r!  c                   s    e Zd ZdZ fddZ  ZS )UserVerificationDriverzuserpageverification.htmlc       
         sX  t t| jf |}td | jjjdr4| jjd }t| jj}|j	dd }|dkrjt
jj|dj }n>|dkrtjj|dj }d}n|d	krtjj|dj }d
}|rLy|d	kr|j|d< W n* tk
r } zt| W Y d d }~X nX d|_|j  |dkrd|d< d}	n,|dkr&d}	n|d	kr>d|d< d
}	nd}	d|d< nd|d< |S )NzUserVerificationDriver - in getr   rH  rx   r   )r  rN  zcompany-dashboardr    zdriver-dashboardr   Tr	  r   zcustomer-loginr}  )r   r$  r   r   r   r   r   r   r  r   r   r$   r%   r&   r  r#   r   r   r  rq   )
r   r   r   r   r  r.  r   r  r   r  )r   ru   rv   r   P  sD    



z'UserVerificationDriver.get_context_data)r   r   r   r   r   r   ru   ru   )r   rv   r$  M  s   r$  c                   s    e Zd ZdZ fddZ  ZS )UserVerificationzuserpageverification.htmlc       	         s   t t| jf |}td | jjjdr4| jjd }t| jj}|j	dd }|dks^|dkrrt
jj|dj }n|dkrtjj|dj }d	}|rd
|_|j  |dks|dkrd|d< d}n|dkrd	}nd}d|d< nd|d< |S )NzUserverification - in getr   rH  rx   r   rN  )r  r    zdriver-dashboardTr	  r   zcustomer-loginr}  )r   r%  r   r   r   r   r   r   r  r   r   r$   r%   r&   r#   r  rq   )	r   r   r   r   r  r.  r   r  r  )r   ru   rv   r   ~  s.    
z!UserVerification.get_context_data)r   r   r   r   r   r   ru   ru   )r   rv   r%  {  s   r%  c                   s(   e Zd ZdZdd Z fddZ  ZS )CustomerLoginzcustomer_login.htmlc             O   s  yt d t |j |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||d
}|dk	r|jjd}tjj|d\}	}
|dks|dkr|dkrt	jj
|ddj }n|dkrt	jj
|ddj }|r|jdkrtdddS |jr&tdddS ||jd< ||jd< t|j\}}|dkr\t | n|dkrnt | td||j|j|jj|	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 ) zHThis function is used for the login process for customer or company userzCustomerLogin Web - in postr.  r   r  i  zUser Role is required)r  r   zEmail address is requiredzPassword is required)r[  r  Nnext)r   r   rN  )r   rf  Fo   zPlease verify your email first.r  zUser is disabled by Admin.r	  r}  r   zcustomer login successfull)	r  r   r  r  r  tokenunread_notifications_countr   redirectlinki  zInvalid Credentials.zerror isi  zException occurred : )r   r   r   r   r   rZ  r
   r$   get_or_creater   r%   r&   r  
isdisabledr   r   r   r  r  r  r  r   r   )r   r   r   r   rB  rA  password_valr   r+  r)  r   r   resultr*  r}  ru   ru   rv   r     sN    






&
zCustomerLogin.postc                s^   t t| jf |}td | jj }| jjjd}|s<d}n|jd}t	|d }||d< |S )z/This function shows the content on login screenzCustomerLogin-in get r'  r}   =r   r+  r-  )
r   r&  r   r   r   get_full_pathrZ  r   r   r   )r   r   r   fullpathr  )r   ru   rv   r     s    

zCustomerLogin.get_context_data)r   r   r   r   r   r   r   ru   ru   )r   rv   r&    s   Cr&  c               @   s   e Zd Zdd ZdS )RegistrationOTPc             O   s^  y"t d t d t |j t d |jjd}|jjd}|jjd}|jjd}|jjd}|jjd}	|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 |	std	ddS |dkr8| jjjd}
| jjjd}| jjjd}| jjjd}| jjjd}| jjjd}t dA tjj|dj }|rt dB y|dksv|dkrt	jj|dd}|rt dC td d!dS t	jj|d"d}|rt dD td$d%dS t dE td d'dS n`|d(krFt
jj|dd}|rtd d)dS t
jj|d"d}|r8t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 nt dF tjj|||	d/}d0jd1d2 td3D }d4| d5 t|j d6 | }ttj| }d7| }y,t | td8|d9t|gdd:}t | W n, tk
r@ } zt | W Y d-d-}~X nX |dkrzt	jj||||||d;}|rtd$d*dS nX|dkrt	jj|||||||d<}|rtjj||
|||||d=}|rtd$d*dS |d(krt
jj||||||d;}|r"t|j}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 )GzGThis class sends the OTP on customer mobile at the time of registrationzRegistrationOTP Web - in postr  r.  r  r   r  r  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 requiredrN  r  r  r  r  r  r  r"   r   )r[  r!   r   T)r   r  r  i  zUser already exists.Fr  r   z_A verification link has been sent to your email address earlier. Please search your mail inbox.r  z0A driver with this email address already exists.r    zUser already existsz8A verification link has been sent to your email address.z2A customer with this email address already exists.zUser exists.Nr  )r[  r   r  r}   c             S   s   g | ]}t jtjtj qS ru   )r  r  r  r  r  )r  r  ru   ru   rv   r  :  s    z(RegistrationOTP.post.<locals>.<listcomp>r   z/user/z/verify/rH  z-
Verify your account through following link:
zEmail verification:ztmpython4esf@gmail.com)rt  )r   r  r   r  r  r  )r   rf  r  r   r  r  r  )r   r  r  r  r  r  r  zUser Role is not definedi  zInternal Server Error0000Z1111Z2222Z3333Z4444Z5555)r   r   r   r   r   r	   r$   r%   r&   r   r#   r   create_userr  r  r   r   r   r  r   r(   r  rw   r   )r   r   r   r   rB  ru  rA  r  r  r.  r  r  r  r  r  r  r   customer_emailverified_objcustomer_emailnotverified_objdriver_emailverified_objdriver_emailnotverified_objr   r  baselinkcompletelinkrs  r   r   r  rs   resposru   ru   rv   r     s    






	zRegistrationOTP.postN)r   r   r   r   ru   ru   ru   rv   r3    s   r3  c                   s(   e Zd ZdZdd Z fddZ  ZS )CustomerRegistrationzcustomer_registration.htmlc             O   s  yb|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 |j jd}|stdddS d|krd| }|j jd}	|	stdddS |j jd}
|
stdddS |j jd}|stdddS tjj|dj }|r,tdddS |j jd}|sLtdddS tjj||	 d|dj }|rTtjj	t
jd}||jkrD||jkrDd|_|j  tjj|||
||d}|r6|dkrtjj|||	|d}|r6tdd dS nB|d!kr(tjj|||	|d}|r6tdd dS ntdd"dS tdd#dS 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 )(zFThis class saves the registration details of customer or company usersr.  r   zUser Role is required)r  r   	firstnamezFirst Name is requiredlastnamezLast Name is requiredr   zEmail Address is requiredr  zCountrycode is requiredr  r  zPhone number is requiredr  zPassword is requiredaddresszAddress is required)r[  zUser exists.r_  zOTP is requiredr]  )r  r^  r_  UTCT)r[  r   r  
first_name	last_namer   )r   r  r  r@  r   zRecord added successfully.rN  zRecord not created.zSome backend error occurred.zOTP has been expired.zInvalid OTP.zInternal Server ErrorN)r   r   r   r	   r$   r%   r&   ra  r  r  r  r  rc  rd  rf  rq   r5  r   r(   r  r   r   )r   r   r   r   rB  firstname_vallastname_valrA  r  r  r.  address_valr   rb  rl  currentdatetimer   r  r   ru   ru   rv   r   d  sp    

zCustomerRegistration.postc                s   t t| jf |}td |S )NzCustomerRegistration-in get )r   r=  r   r   )r   r   r   )r   ru   rv   r     s    z%CustomerRegistration.get_context_data)r   r   r   r   r   r   r   ru   ru   )r   rv   r=  a  s   ?r=  c               @   s   e Zd Zdd ZdS )Logoutc             C   s   t d | jjjdr | jjd= d}| jjjdrH| jjd }| jjd= |dksX|dkrdttdS |dkst|dkrttd	S ttdS d
S )zLThis function performs the logout operation by deleting all session elementszLogout-in get r   r   r.  r    zcustomer-loginadmin
superadminzadmin-loginN)r   r   r   r   r   r   )r   r   r.  ru   ru   rv   r     s    

z
Logout.getN)r   r   r   r   ru   ru   ru   rv   rH    s   rH  c                   s    e Zd ZdZ fddZ  ZS )Indexz
index.htmlc                s   t t| jf |}td | jjjdr| jjd }|dkrHttdS |dkr\ttdS |dkrpttdS |d	krttd
S |dkrttdS ttdS n|S d S )NzIndex-in get r.  r   zcustomer-dashboardrN  zcompany-dashboardr    zdriver-dashboardrI  zadmin-dashboardrJ  zsuperadmin-dashboardzcustomer-login)	r   rK  r   r   r   r   r   r   r   )r   r   r   r.  )r   ru   rv   r     s     zIndex.get_context_data)r   r   r   r   r   r   ru   ru   )r   rv   rK    s   rK  c                   s    e Zd ZdZ fddZ  ZS )AboutUszaboutus.htmlc                s   t t| jf |}td |S )NzAboutUs-in get )r   rL  r   r   )r   r   r   )r   ru   rv   r     s    zAboutUs.get_context_data)r   r   r   r   r   r   ru   ru   )r   rv   rL    s   rL  c                   s    e Zd ZdZ fddZ  ZS )TutorialViewztutorial.htmlc                s   t t| jf |}td |S )NzTutorialView-in get )r   rM  r   r   )r   r   r   )r   ru   rv   r     s    zTutorialView.get_context_data)r   r   r   r   r   r   ru   ru   )r   rv   rM    s   rM  c                   s    e Zd ZdZ fddZ  ZS )TermsAndConditionsztermsandconditions.htmlc                s   t t| jf |}td |S )NzTermsAndConditions-in get )r   rN  r   r   )r   r   r   )r   ru   rv   r     s    z#TermsAndConditions.get_context_data)r   r   r   r   r   r   ru   ru   )r   rv   rN    s   rN  c                   s    e Zd ZdZ fddZ  ZS )FunctionalDocumentzfunctional_document.htmlc                s   t t| jf |}td |S )NzFunctionalDocument-in get )r   rO  r   r   )r   r   r   )r   ru   rv   r     s    z#FunctionalDocument.get_context_data)r   r   r   r   r   r   ru   ru   )r   rv   rO    s   rO  c                   s(   e Zd ZdZ fddZdd Z  ZS )ChangePasswordzchangepassword.htmlc                s   t t| jf |}td d}| jjjdr|| jjd }tjj	|dj
 }|r|tjj	|d}|rfd}ntjj	|d}|r|d}||d< |S )	NzChangePassword-in get r}   r   )r   )r   r   r    r.  )r   rP  r   r   r   r   r   r	   r$   r%   r&   r   r#   )r   r   r   r.  r   r   r   rs   )r   ru   rv   r     s    zChangePassword.get_context_datac       
      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 | jjjd
r| jjd
 }tjj|d}|j	|rt d t
||_|j  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Please enter old password)r  r   zPlease enter new passwordr   )r   zcorrect passwordr   r	  zinvalid passwordzOld password is incorrecti  zInternal Server Error)r   r   r   r   r   r   r   r	   r$   check_passwordr   r  rq   r   )
r   r   r   r   rB  oldpassword_valnewpassword_valr   r   r   ru   ru   rv   r     s.    

zChangePassword.post)r   r   r   r   r   r   r   ru   ru   )r   rv   rP    s   rP  c                   s(   e Zd ZdZ fddZdd Z  ZS )ForgotPasswordzforgotpassword.htmlc                s   t t| jf |}td d}| jjjdr|| jjd }tjj	|dj
 }|r|tjj	|d}|rfd}ntjj	|d}|r|d}||d< |S )	NzForgotPassword-in get r}   r   )r   )r   r   r    r.  )r   rV  r   r   r   r   r   r	   r$   r%   r&   r   r#   )r   r   r   r.  r   r   r   rs   )r   ru   rv   r   @  s    zForgotPassword.get_context_datac             O   s  ydt d t |j |jjd}|jjd}|s@tdddS |sRtddd	S tjj|d
j }|rV|dkrtjj|dj }n:|dkrt	jj|ddj }n|dkrt	jj|ddj }|rFd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 ntdddS W n8 tk
r } zt | tdt|dS d }~X nX d S )NzForgotPassword-in postr.  r   r   zUser Role is required)r  r   i  zEmail Address is required)r   rs  )r   r    )r   r   )r   rf  rN  r}   c             S   s   g | ]}t jtjtj qS ru   )r  r  r  r  r  )r  r  ru   ru   rv   r  g  s    z'ForgotPassword.post.<locals>.<listcomp>r   z/user/z/forgot/rH  z,
Forgot your Password click following link:
zForgot Password:ztestdemotest11@gmail.comT)rt  r   z9A reset password link has been sent to your email addresszEmail does not exist.)r   r   r   r   r	   r$   r%   r&   r#   r   r  r  r   r   r   r  r  rq   r   r   )r   r   r   r   rB  rA  r   userrole_objran_numr:  r;  rs  r   ru   ru   rv   r   T  s>    
zForgotPassword.post)r   r   r   r   r   r   r   ru   ru   )r   rv   rV  =  s   rV  )wdjango.shortcutsr   django.views.generic.baser   r   django.httpr   r   r   django.contrib.authr   django.contrib.auth.modelsr	   rest_framework.authtoken.modelsr
   rest_framework.viewsr   
decoratorsr   r   r   django.utils.decoratorsr   Customer.modelsCustomer.commonfunctionsr   Driver.modelsZAdminApp.modelsAdminApp.adminfunctionsr   r   django.urlsr   r  r  r  r  r  django.confr   django.core.mailr   r   rx  ry  commonfunctionsr   r   django.contrib.auth.hashersr   sysr$  django.core.paginatorr   r  r  ior   r  r   rw   r   r   r   r   r   r   r   r   r+  r-  rG  rM  rb  ri  r  r  r  rP  rR  ro  rr  rw  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r$  r%  r&  r3  r=  rH  rK  rL  rM  rN  rO  rP  rV  ru   ru   ru   rv   <module>   s   (R>>H+ {?* /C	     =    E   4' S1. 3 Y&B$  X&I@).K%/E.%UlH

>