a
    f5$                     @   s  d dl mZ d dlT d dlZd dlmZmZ d dlZG dd dejZ	G dd dejZ
G d	d
 d
ejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd  d ejZG d!d" d"ejZG d#d$ d$ejZG d%d& d&ejZG d'd( d(ejZG d)d* d*ejZG d+d, d,ejZG d-d. d.ejZdS )/    )models)*N)MinValueValidatorMaxValueValidatorc                   @   s    e Zd ZejddZdd ZdS )Meteoservice   
max_lengthc                 C   s   | j S Ntitleself r   */var/www/html/django/DPS/gardens/models.py__str__   s    zMeteoservice.__str__N__name__
__module____qualname__r   	CharFieldr   r   r   r   r   r   r      s   r   c                   @   s\   e Zd ZejddZejddZejddZejddZ	ej
eejdZej
eejdZdS )Meteostationsr   r      Tnull	on_deleteN)r   r   r   r   r   namelocationZservice_uri	JSONFieldZlast_forecast
ForeignKeyEnterprisesCASCADE
enterpriser   Zmeteoservicer   r   r   r   r      s   r   c                   @   sV   e Zd ZejddZejddZejddddZej	e
ejddZd	d
 Zdd ZdS )Gardens   r   d   TN)blankr   default   )r   r(   c                 C   s   | j S r
   r   r   r   r   r   r   ,   s    zGardens.__str__c                 C   s   d| j  S )Nz	/gardens/)idr   r   r   r   get_absolute_url/   s    zGardens.get_absolute_url)r   r   r   r   r   r   addressr   polygonr    r!   r"   r#   r   r,   r   r   r   r   r$   $   s   r$   c                   @   s    e Zd ZejddZdd ZdS )
Cultivaresr%   r   c                 C   s   | j S r
   r   r   r   r   r   r   5   s    zCultivares.__str__Nr   r   r   r   r   r/   2   s   r/   c                   @   sx   e Zd ZejddZejdddZejddZ	ej
eejddZej
eejdZej
eejd	dd
Zdd Zdd ZdS )Blocks2   r   Tr'   r   Fr(   r   r   r   r)   r   r(   r   c                 C   s   | j S r
   r*   r   r   r   r   r   B   s    zBlocks.__str__c                 C   s   d| j j d| j S )N/blocks//)gardenr+   r   r   r   r   r,   E   s    zBlocks.get_absolute_urlN)r   r   r   r   r   r   r   r.   BooleanFieldZis_autonomousr    r   SET_NULLZprivate_meteostationr$   r"   r8   r/   cultivarr   r,   r   r   r   r   r0   8   s   r0   c                   @   s    e Zd ZejddZdd ZdS )YieldStagesr   r   c                 C   s   | j S r
   r   r   r   r   r   r   K   s    zYieldStages.__str__Nr   r   r   r   r   r<   H   s   r<   c                   @   s@   e Zd ZejddZe Ze Zej	e
ejdZdd ZdS )
TreeBreedsr1   r   r   c                 C   s   | j S r
   r   r   r   r   r   r   V   s    zTreeBreeds.__str__N)r   r   r   r   r   r   
FloatFieldwidthheightr    r/   r"   Z	cultivater   r   r   r   r   r=   N   s
   r=   c                   @   sr   e Zd ZejddZe Ze ZejddZ	ejdddZ
e ZejeejdZejeejdZdd Zd	S )
EnterpriseSpecificBreedsr1   r   Tr   )r	   r   r   c                 C   s   | j S r
   r   r   r   r   r   r   d   s    z EnterpriseSpecificBreeds.__str__N)r   r   r   r   r   r   r>   r?   r@   yieldsZ	injectionZplanting_distancer    r!   r"   r#   r/   r;   r   r   r   r   r   rA   Y   s   rA   c                   @   s4   e Zd Ze ZejeejdZ	eje
ejdZdS )TreeRowr   N)r   r   r   r   r   Zcoordinatesr    r0   r"   blockrA   Z
tree_breedr   r   r   r   rC   g   s   rC   c                   @   sp   e Zd Ze Ze Ze Ze Zej	ddZ
ejeejddZejeejddZejeejdddZdS )Treesr1   r   Tr4   Nr5   )r   r   r   r   r>   latitude	longituder?   r@   r   Zbreedr    r/   r"   Z
cultivaresr0   rD   rC   rowr   r   r   r   rE   n   s   rE   c                   @   s*   e Zd ZejdddZejeejdZ	dS )ProtectedRegionsTr2   r   N)
r   r   r   r   r   r.   r    r$   r"   r8   r   r   r   r   rI   z   s   rI   c                   @   sn   e Zd ZejddZejddZe Ze Z	e Z
e Ze ZejdededgdZdd Zd	S )
DroneModelsr%   r   r1   r   ih  )r(   
validatorsc                 C   s   | j S r
   )modelr   r   r   r   r      s    zDroneModels.__str__N)r   r   r   r   r   ZmakerrL   r>   Zfly_time_minZworking_rangeZmin_temperatureZmax_temperatureZ	camera_mpr   r   Zcamera_directionr   r   r   r   r   rJ      s   rJ   c                   @   sT   e Zd ZejddZejeejdZ	eje
ejdddZejeejdZdd ZdS )	Drones(   r   r   T)r   r   uniquec                 C   s   | j S r
   r*   r   r   r   r   r      s    zDrones.__str__N)r   r   r   r   r   r   r    rJ   r"   rL   r0   r:   rD   r!   r#   r   r   r   r   r   rM      s
   rM   c                   @   s,   e Zd Ze Ze Zejeej	dZ
dS )DroneStationsr   N)r   r   r   r   r>   rF   rG   r    r0   r"   rD   r   r   r   r   rP      s   rP   c                   @   sR   e Zd ZejddZejejddZ	ej
eejddZej
eejdZdd	 Zd
S )DevicesrN   r   F)r(   editableTr4   r   c                 C   s   | j S r
   r*   r   r   r   r   r      s    zDevices.__str__N)r   r   r   r   r   r   	UUIDFielduuiduuid4keyr    r0   r:   rD   r!   r"   r#   r   r   r   r   r   rQ      s
   rQ   c                   @   s   e Zd ZejddZejddZejddZ	ejddZ
ejeejddZejeejd	Zd
d Zdd Zdd Zdd Zdd Zdd ZdS )MissionsrN   r   r   r3   Tauto_now_addr   r4   r   c                 C   s   | j S r
   r*   r   r   r   r   r      s    zMissions.__str__c                 C   sR   t jj| d}t|dkrdS d}|D ]}|jdkr&|d7 }q&t|t| d S )Nmissionr   r)   r&   )Flightsobjectsfilterlenstatusint)r   flights	completedZflightr   r   r   completionPercentage   s    

zMissions.completionPercentagec                 C   s4   t jj| dpdd}t|dkr0t|dd dS d S )Nr   r)   r[   r`   c                 S   s   | j S r
   )
start_datexr   r   r   <lambda>       z%Missions.nextFlight.<locals>.<lambda>rV   )r\   r]   r^   r_   minr   rb   r   r   r   
nextFlight   s    zMissions.nextFlightc                 C   s0   t jj| dd}t|dkr,t|dd dS d S )N   re   r   c                 S   s   | j S r
   )end_daterg   r   r   r   ri      rj   z%Missions.lastFlight.<locals>.<lambda>rk   )r\   r]   r^   r_   maxrm   r   r   r   
lastFlight   s    zMissions.lastFlightc                 C   sH   t jj| dd }| dkr(dS t|jdd |  d S )NrZ   treer   T)has_scabr&   )	TreeStater]   r^   valuesdistinctcountra   )r   ZTreeStateOneTreeOnlyr   r   r   scabPercentage   s    zMissions.scabPercentagec                 C   s"   d| j jj d| j j d| j S Nr6   r7   z	/mission/)rD   r8   r+   r   r   r   r   r,      s    zMissions.get_absolute_urlN)r   r   r   r   r   r   r9   r`   DateTimeFieldZgenerated_dateZclosed_dater    r0   r:   rD   r<   r"   Zstager   rd   rn   rr   ry   r,   r   r   r   r   rW      s   
rW   c                   @   sJ   e Zd ZejdddZejddZeje	ej
ddZejeejddZdS )FlightPlansTr2   Fr   r4   N)r   r   r   r   r   Zflight_planIntegerFieldZsequence_numr    rW   r"   r[   r0   r:   rD   r   r   r   r   r|      s   r|   c                   @   sb   e Zd Ze ZejddZejddZej	ddZ
ejeejdZejeejddZdd ZdS )r\   Tr   r   r4   c                 C   s(   d| j jjj d| j jj d| jj S rz   )planrD   r8   r+   r[   r   r   r   r   r,      s    zFlights.get_absolute_urlN)r   r   r   r   r}   r`   r{   rf   rp   r   Zdiagnosticsr    rW   r"   r[   r|   r~   r,   r   r   r   r   r\      s   r\   c                   @   s^   e Zd ZejddZe Ze Z	ej
ddZe ZejeejdZejeejddZdS )Photoszuploads/	upload_toTrX   r   r4   N)r   r   r   r   
ImageFieldZ	image_urir   ZGPSr>   Zaltituder{   	date_timer}   Zphoto_location_numr    rE   r"   rs   rW   r[   r   r   r   r   r      s   r   c                   @   s   e Zd ZejddZejddZejddZej	de
j
ddde
jjddZejedejdZejeejdZejeejdZG d	d
 d
ZdS )ru   Tr   i  r)   )tzinfo)r   r(   )r   r   r   c                   @   s   e Zd ZdZdS )zTreeState.Meta)yield_stagers   r[   N)r   r   r   unique_togetherr   r   r   r   Meta  s   r   N)r   r   r   r   r>   rB   Zprobability_scabr9   rt   r{   datetimetimezoneutcZlast_updatedr    r<   r"   r   rE   rs   rW   r[   r   r   r   r   r   ru     s    ru   c                   @   sR   e Zd ZejddZejddZe Z	ejdddZ
ejddgd	Zd
d ZdS )MLModelsr1   r   z
ML_models/r   Tr2   )ZyoloZYOLO)Z	mobilenetZ	MobileNet)choicesc                 C   s   | j S r
   r   r   r   r   r   r     s    zMLModels.__str__N)r   r   r   r   r   r   	FileFieldZfile_urir   classesZactive_classes	TextFieldZ
model_typer   r   r   r   r   r     s   r   )	django.dbr   Zusercontrol.modelsrT   Zdjango.core.validatorsr   r   r   Modelr   r   r$   r/   r0   r<   r=   rA   rC   rE   rI   rJ   rM   rP   rQ   rW   r|   r\   r   ru   r   r   r   r   r   <module>   s2   

-	