
^                 @   sT   d  d l  m Z d  d l Td  d l Td  d l Td  d l m Z e d d    Z d S)    )shared_task)*)assigndriverforparcelc           
      s  t  d  d d l m  m  m  m   m        f d d   }  d d   } t j j	 d d  } x| D]} g  } | j
 rx | j rx | j rx t  d	  t  t | j  d
 | j
 d | j d
 | j j  t j j	 d d d | j j  } t |  d k r8t  d  t j j	 d | j j  j   } | r| j } t j j	 d |  j d  } | rxV| D] }	 t j j	 d d d |	  } | rxx | D] }
 t j j	 d |
  j   } | r#|  | j
 | j | j | j  } t  |  | j d |
 j d |
 j j d | i  qt  d  qWqxWn t  d  x | D]} }
 t j j	 d |
  j   } | r|  | j
 | j | j | j  } | j d |
 j d |
 j j d | i  qIt  d  qIWt | d d d   d d } t  |  t |  d k rid } xf| D]Q} | st  | d  t j j	 d | d d d  } | rd } xR | D]J } | j j r]| j j } t  |  | |  \ } } | r]| | 7} q]Wd& \ } } | j r| | j  \ } } d  } t | j | d  } t  |  d! | _ | j    qd  } t  d" t | d   t | j | d  } t  |  d! | _ | j    qWqx t  d#  qx Wt  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/Admin/tasks.py	haversine   s    ''

:z,assigndriverforparceltask.<locals>.haversinec             S   sH   |  d k r d S|  d k r  d S|  d k r0 d S|  d k r@ d Sd Sd  S)NzLess than 5 kgT   z"More than 5 kg but less than 20 kg   z#More than 20 kg but less than 50 kg2   zMore than 50 kg3   Fr   )Tr   )Tr   )Tr   )Tr   )Fr   r   )wtr   r   r   getmaximumweightinbuffer   s    z;assigndriverforparceltask.<locals>.getmaximumweightinbufferstatus
z  --  ,vehicletype_idzin ifidcarryinglimitinkg__gtecarryinglimitinkgvehicletypedriverdriveriddrivervehicledistancezdriver coordinates do not existzin elsekeyc             S   s   |  d S)Nr*   r   )ir   r   r   <lambda>O   s    z+assigndriverforparceltask.<locals>.<lambda>reverseF	driver_idjobcompleted        T   z job assigned to driver with id: zdriver foundz(celery - assigndriverforparceltask ended )Fr1   )!printmathr   r   r   r   r	   CustomerJobobjectsfiltersenderlatitudesenderlongituder&   strr#   nameDriverlenVehicleTypefirstr%   order_byDriverCoordinateslatitude	longitudeappendsorted	DriverJobcustomerjobweightr   r   save)r   r   pendingcustomerjobsjobnearestdrivers_data
driver_objrequiredvehicletype_objvehiclecarryinglimitbiggervehicletype_objbiggervehicler'   drivercoordinates_objr*   driverassignednearestdriverdriverjob_objdrivervehicletotalweight	driverjobr   successrI   resr   )r   r   r   r   r	   r   assigndriverforparceltask	   s    
(
	
7!
!	!
	
!	

	
	
	
r[   N)celeryr   Customer.modelsDriver.modelsZAdmin.modelsAdmin.adminfunctionsr   r[   r   r   r   r   <module>   s
   


