a
    j0$e3                     @   sX   d dl T d dlT d dlZd dlZd dlZg dZdd Zddd	ZdddZdd Z	dS )    )*N)u	   Janvārisu
   FebruārisZMartsu   AprīlisZMaijsu   Jūnijsu   JūlijsZAugustsZ
SeptembrisZOktobrisZ	Decembrisc                 C   s   t | |d||d}g }|D ]}||  q|}t|dkr| d krtjj|| |d}	tdt|D ]4}
dd||
 gdd	}tjj||
d |	j	| d
 qf|	S )N   )flying_altitudeZmax_distance_to_tree_metersobstacle_avoidance
only_sides   )nameblock_idstage_idr   ZFeatureZPolygon)typecoordinates)r   geometry)flight_plansequence_num
mission_idr	   )
Zpath_calculationsappendtolistlenMissionsobjectscreaterangeFlightPlansid)r	   mission_namemission_stager   r   r   ZplansZ
plans_listplanmissionxZgeoJSON r   =/var/www/html/django/DPS/gardens/flight_planning_algorithm.pygenerate_mission   s2    r!   r   r   c                 C   s   | j d d d }d}d}d}tt|d D ]}t|| d ||d  d  d || d ||d  d  d  }	|	d }	|| d ||d  d  }
||	7 }|t|
7 }|
dkr|
| }nt|
| }||7 }q.||| 7 }|d S )Nr   r   r   r   r   i <   )r   r   r   mathsqrtabs)r   ZspeedZascent_speedZdescent_speedZflight_plan_coordinatesZtotal_distanceZ
total_timeZtotal_altiude_distanceiZdistanceZdistance_altitudetimer   r   r    calculate_flight_time_altitude&   s     F

r(   FTc              
   C   s  t j  }d}|d krt|jd   d|j }|d t| d }	|	tjjdddv rv|d7 }|d t| d }	qD|d t| d }t	| |||||}
nt	| |||||}
t
jj|
jd}t j  jt jjd	t jdd
 }tjj| d}|D ]2}tjj|jd}|D ]}|j|kr|j}qq|D ]}|t jdd }tjj|jd}|jdkrj|jdk rjn |t jdd
 }|jdddd}| dkrtjjd|
j|j||t jt|d d}t|}td| |t j|d }q,|
S )Nr    ()r   T)flatr   tzinfodays)r	   x   minutes)plan_id      r   hourminutesecond)statusr   r5   
start_dateend_dateztime:)datetimenowmonthsLVmonthyearstrr   r   values_listr!   r   filterr   replacetimezoneutc	timedeltaFlightsr>   r9   countr   r(   print)r	   r   r   r   r   r   currentTimeZmission_numberr   Z
check_namer   Zflight_plans
start_timemissionsZmission_blockZ	flightsssflightr   flightsZflight_timer   r   r    autonomous_flight_time_planning;   sL    
"
rS   c                 C   s  t jj| d}tjj|jd}tjj|jd}tjj|jdd}t	j	
 jt	jjd}|D ].}t jj|jd}|D ]}|j|krr|j}qrqZ|t	jdd }|jdkr|jd	k rn |t	jd
d }|jdddd}||_|t	jttjj|jdd |_|  dS )N)r   r   )r	   r<   r.   r-   r2   r3   r6   r7   r   r0   r8   T)rK   r   getr   r   Blocksr	   rF   r   r?   r@   rG   rH   rI   r>   rJ   r9   r=   r(   r   r5   save)Z	flight_idZresheduled_flightr   blockrP   Z	next_timerR   rQ   r   r   r    reschedule_flightt   s&    

"rX   )r   r   r   )Nr   r   FT)
Zapi.flight_plan_algorithmZgardens.modelsr'   r?   jsonrA   r!   r(   rS   rX   r   r   r   r    <module>   s   

9