o
    hE                     @   s~  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mZ d dl	m
Z
mZ d dlmZmZmZmZ d dlmZ d d	lmZmZ d
ZdZG dd dejZdedefddZdedededee dee dee dee dee dee defddZdedefddZdededefd d!Z dedefd"d#Z!dedeeeef  fd$d%Z"d+ded'ed(edeeeef  fd)d*Z#dS ),    N)datetime)ObjectId)	InvalidId)DuplicateKeyError)HTTPExceptionQuery)OptionalListDictAny)get_next_sequence_value_int)	ASCENDING
DESCENDINGfleetsvehiclesc                       s   e Zd Z fddZ  ZS )CustomJSONEncoderc                    s0   t |tr	| S t |trt|S t |S N)
isinstancer   	isoformatr   strsuperdefault)selfobj	__class__ ;/var/www/html/moveengine/app/v1/services/platform/fleets.pyr      s
   

zCustomJSONEncoder.default)__name__
__module____qualname__r   __classcell__r   r   r   r   r      s    r   
fleet_datareturnc              
   C   sn  |t  }|t }zt }|| d< || d< td|| d< || }t|j}|| d< || d< dD ]}|| v rEt| | trE| | 	 | |< q0d| v r| d D ]@}d|vri|
dt|d	 i}	|	ri|	dd
|d< d|vr|
dt|d	 i}	|	r|	dd
|	dd
|	dd
d|d< qNd| iW S  ty   tddd ty }
 ztddt|
 dd }
~
ww )Ncreated_dateupdated_date	fleets_id_idfleet_idr$   r%   r   vehicle_typevehicle_model_id model_detailsmanufacturer_name	fuel_typer.   r*   r/   r"     zFleet creation failedstatus_codedetail  zServer error: )COLLECTION_NAMEVEHICLE_COLLECTIONr   utcnowr   
insert_oner   inserted_idr   r   find_oner   getr   r   	Exception)r"   dbfleets_collectionvehicles_collectioncurrent_timeresultr(   fieldvehiclemodeler   r   r   create_fleet_service   sJ   





rG   
account_idskiplimitqstatuscreated_date_fromcreated_date_tosort_by
sort_orderc
                 C   s  |	t  }
|	t }i }| dkr| |d< |r)|dd}d|id|id|id|ig|d	< |r/||d
< |s3|rMi }|r?t|d|d< |rIt|d|d< ||d< ddddddd
dd}||d}|dkrdtnt}|
|||	|
|}t|}g }|D ]X}z;t|d |d< t|d |d< |dd |dd dD ]}||v rt|| tr||  ||< q|| W q} ty } ztdt|  W Y d }~q}d }~ww |
|}||dS )NallrH   iz$regexz$options
fleet_namedescriptionregistration_number
vin_numberz$orrL   z%Y-%m-%dz$gtez$lter$   r*   coloryearvendor_name)rT   r*   rX   rY   rV   rZ   rL   r$   ascr'   r(   r,   user_idr)   zError processing fleet: )total_countr   )r6   r7   r   strptimer<   r   r   findsortrI   rJ   listr   
setdefaultr   r   appendr=   printcount_documents)rH   rI   rJ   rK   rL   rM   rN   rO   rP   r>   r?   vehicle_models_collectionqueryregex_querydate_filtersort_fields
sort_fieldsort_directioncursorr   formatted_fleetsfleetrC   rF   r]   r   r   r   get_fleets_service`   sj   



rp   r(   c                 C   s4  |t  }|t }zt| }W n ty   tdddw |d|i}|s+tdddzt|d |d< t|d |d< |dd	 |d
d	 |dg  dD ]}||v ret|| t	re|| 
 ||< qPd|v r|d rtdd}| d|d  |d< |dg D ]r}d|vrqzEt|d |d< |dt|d idddd}	|	r|	dd	|	dd	|	dd	d|d< d|vr|	dd	|d< ndddd|d< W q ty }
 ztd|  dt|
  dddd|d< W Y d }
~
qd }
~
ww W |S  ty }
 ztd|  dt|
  tdddd }
~
ww )Nr1   Invalid fleet IDr2   r'     Fleet not foundr(   rH   r,   r\   r   r)   vehicle_imageBASE_URLzhttp://localhost:8003/r+      r0   r.   r*   r/   r-   Unknownz"Error processing vehicle in fleet z: ErrorzError processing fleet r5   zError processing fleet data)r6   r7   r   r   r   r;   r   rb   r   r   r   osgetenvr<   r=   rd   )r(   r>   r?   r@   fleet_object_idro   rC   base_urlrD   rE   rF   r   r   r   read_fleet_service   sx   





'r~   c                 C   sh  |t  }|t }zt| }W n ty   tdddw |d|i}|s+tddddd | D }t |d	< d
|v r\|d
 D ]}|dt|d is[tdd|d  ddqB|	d|id|i}	|	j
dkrqtddd|d|i}
t|
d |
d< t|
d |
d< |
dd |
dd |
d
g  dD ]}||
v rt|
| tr|
|  |
|< q|
S )Nr1   rq   r2   r'   rr   rs   c                 S   s   i | ]\}}|d ur||qS r   r   ).0kvr   r   r   
<dictcomp>K  s    z(update_fleet_service.<locals>.<dictcomp>r%   r   r+   zVehicle model z
 not foundz$setr   r(   rH   r,   r\   r)   )r6   r7   r   r   r   r;   itemsr   r8   
update_onematched_countr   rb   r   r   )r(   r"   r>   r?   r@   r|   existing_fleetupdate_datarD   rB   updated_fleetrC   r   r   r   update_fleet_service>  sJ   
r   c                 C   s  |t  }|t }zt| }W n ty   tdddw |d|i}|s+tddd|drG|d D ]}|dt|d id	d
| ii q4|d|i t	|d |d< t	|d |d< |
dd |
dd |
dg  dD ]}||v rt|| tr||  ||< qr|S )Nr1   rq   r2   r'   rr   rs   r   r+   z$pull	fleet_idsr(   rH   r,   r\   r)   )r6   r7   r   r   r   r;   r<   r   
delete_oner   rb   r   r   r   )r(   r>   r?   r@   r|   ro   rD   rC   r   r   r   delete_fleet_serviceq  s6   

r   c           
      C   s   |t  }|t }zt| }W n ty   tdddw |d|i}|s+tdddg }|dg D ]6}|dt|d i}|rii |d	|d
d|dd|dd|dd|dddi}	||	 q3|S )Nr1   rq   r2   r'   rr   rs   r   r+   r-   r.   r,   r*   r/   is_autonomousFcan_fly)r.   r*   r/   r   r   )r6   r7   r   r   r   r;   r<   rc   )
r(   r>   r?   r@   r|   ro   r   rD   rE   vehicle_datar   r   r   get_fleet_vehicles_service  s8   






r   r,   rg   rQ   c                 C   sZ   | t  }d|i}|dkrddi|d< |rt|dd|d< ||dd	i}d
d |D S )NrH   rQ   z$neTis_fleet_assignedrR   rS   rT   rw   c                 S   s&   g | ]}t |d  |dddqS )r'   rT   r,   )idrT   )r   r<   )r   fr   r   r   
<listcomp>  s   & z+get_fleet_dropdown_list.<locals>.<listcomp>)r6   reescaper_   )r>   rH   rg   rQ   r?   filtersr   r   r   r   get_fleet_dropdown_list  s   r   )r,   r,   )$rz   jsonr   bsonr   bson.errorsr   pymongo.errorsr   fastapir   r   typingr   r	   r
   r   app.v1.services.sequencer   pymongor   r   r6   r7   JSONEncoderr   dictrG   r   intrp   r~   r   r   r   r   r   r   r   r   <module>   sR    
G	
 L3(, 