3
af_'                 @   sT   d dl mZ d dlT d dlT d dlT d dlmZ d dlZedd Zedd Z	dS )	    )shared_task)*)assigndriverforparcelNc        	         s  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tjj d}t | xF|D ]2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\}}|rh||d}n nT| jj|d\}}|r<||d}n,|jjjjd\}}|rh||d}n t|dkrt dt|d d   tj|d d }t | |rd_j  qt dj qW nt d t d t d dS )Nz*celery - assigndriverforparceltask startedr   )radianscossinasinsqrtc       	         s   t t| |||g\} }}}t | |||g\} }}}|| }||  }|d d | | |d d   }d | }d}|| S )N   i  )mapfloat)	lat1lon1lat2lon2dlondlatacr)r   r   r   r   r	    -/var/www/html/GoodsDelivery/AdminApp/tasks.py	haversine   s    0z,assigndriverforparceltask.<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)driver)driveriddrivervehicledistancer   TF)DriverCoordinatesobjectsfilterfirstlatitude	longitudeappendidvehicletypenamelen)senderlatitudesenderlongitude
driver_objnearestdrivers_datar   drivercoordinates_objr   success)r   r   r   &get_nearestdriversdata_from_driversobj   s    
zIassigndriverforparceltask.<locals>.get_nearestdriversdata_from_driversobjc             S   s   t | dd dd} | S )Nc             S   s   | d S )Nr   r   )ir   r   r   <lambda>-   s    zMassigndriverforparceltask.<locals>.sort_nearestdrivers_data.<locals>.<lambda>F)keyreverse)sorted)r+   r   r   r   sort_nearestdrivers_data,   s    z;assigndriverforparceltask.<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$   )carryinglimitinkg__gtecarryinglimitinkgr   )statusr%   )r   )r   r   r   TF)VehicleTyper   r   r%   r$   r    r6   order_byDriverModelr   r!   r"   r#   r&   r'   )r(   r)   vehicletypeidr+   requiredvehicletype_objvehiclecarryinglimitbiggervehicletype_objbiggervehicler*   r   r,   r   r-   )r   jobr   r   %get_nearestdriversdata_biggervehicles1   s.    


zHassigndriverforparceltask.<locals>.get_nearestdriversdata_biggervehicles)r7   creation_date
)r7   vehicletype_id)r(   r)   r;   )r+   )r(   r)   r*   z job assigned to driver with id: r      zno driver found for job: zAuto assign is disabledendz(celery - assigndriverforparceltask ended )printmathr   r   r   r   r	   BackendControlr   r    enableCustomerJobr   datetimedatetodayr(   r)   r%   r:   r$   r'   strr   r7   save)	r.   r4   rA   backendcontrol_objpendingcustomerjobsr+   r*   r-   resr   )r   r   r   r@   r   r   r	   r   assigndriverforparceltask	   sR    



rU   c           (   C   s  t d ytjjdd} | rx| D ]}t d t |j tjj|jd}tjj|jd}||k r(|j	rtjj|j	d}|tj
t|jd }n|tj
t|jd }||kr(t | t | t | tjj|jdj }|r(d}|jrtjjd	d
j }|r|j}|j}	|	| }
tjj|jjd|	||
d}|rt d tjj||j|j|j|j|j|j|j|j|j|j|j |j!|j"|j#|j$|j%|j&|j'|j(|j)|j*|j+|j,|j-|j.|j/|j0j1|jt2|j3 d}|r|j-r|j.r|j-|_-|j.|_.|j4  t d y t d t5|jd t d W n, t6k
rN } zt | W Y d d }~X nX yt7|j}t | W n, t6k
r } zt | W Y d d }~X nX nt d |j8d|_	|j4  q(t d q(W W n, t6k
r } zt | W Y d d }~X nX d S )Nzrepeat_order_cron startedF)is_cancelledrC   z%d/%m/%Y)days)r$   g        zSpecial Booking Charges)r&   rE   )customer	ordertypeparceldelivery_chargesspecialbooking_chargestotalamountz#
order_obj is successfully created
)orderrX   
sendernamesenderemailsendercountrycodesenderphonepickupaddress
sendercityr(   r)   pickupspecialnotenoofparcelsrecipientnamerecipientcountrycoderecipientphonerecipientlatituderecipientlongitudedropoffaddressdropoffspecialnotelengthwidthheightweight
parceltypepickuptimeslotdropofftimeslotr%   imagespecialbookingspecialbooking_chargerB   z 
new_customerjob_obj is created
z#before generateqrcode function call)id_valzafter function callz$
new_customerjob_obj is not created
z
order_obj is not created
)9rH   RepeatOrderr   r   r$   rM   strptime
start_dateend_datelast_booking_date	timedeltaintrepeat_after_daysrL   base_customerjob_idr    ru   rJ   priceOrdercreater]   rX   r^   r_   r`   ra   rb   rc   r(   r)   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   r%   rt   r&   rv   rN   rQ   generateqrcode	Exceptiongenerateparcelpdfstrftime)repeatorder_objZrepeatorderrz   r{   r|   Znew_booking_datecustomerjob_objr[   rR   rZ   r\   	order_objnew_customerjob_objerT   r   r   r   repeat_order_cron   sl    


r   )
celeryr   Customer.modelsDriver.modelsZAdminApp.modelsAdminApp.adminfunctionsr   rM   rU   r   r   r   r   r   <module>   s    