o
    X0iR                     @   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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#d0ded(ed)edeeeef  fd*d+Z$d,d- Z%d.d/ Z&dS )1    N)datetime)ObjectId)	InvalidId)DuplicateKeyError)HTTPExceptionQuery)OptionalListDictAny)get_next_sequence_value_int)	ASCENDING
DESCENDINGfleetsvehiclesfleet_maintenance_logsc                       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   s  |t  }|t }zt }|| d< || d< td|| d< t| dd| d< || }t|j	}|| d< || d< dD ]}|| v rOt
| | trO| |  | |< q:d	| v r| d	 D ]@}d
|vrs|dt|d i}	|	rs|	d
d|d
< d|vr|dt|d i}	|	r|	dd|	d
d|	ddd|d< qXd| 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can_flyF_idfleet_idr%   r&   r   vehicle_typevehicle_model_id model_detailsmanufacturer_name	fuel_typer0   r,   r1   r#     zFleet creation failedstatus_codedetail  zServer error: )COLLECTION_NAMEVEHICLE_COLLECTIONr   utcnowr   boolget
insert_oner   inserted_idr   r   find_oner   r   r   	Exception)r#   dbfleets_collectionvehicles_collectioncurrent_timeresultr*   fieldvehiclemodeler   r   r   create_fleet_service   sL   





rJ   
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allrK   iz$regexz$options
fleet_namedescriptionregistration_number
vin_numberz$orrO   z%Y-%m-%dz$gtez$lter%   r,   coloryearvendor_name)rW   r,   r[   r\   rY   r]   rO   r%   ascr)   r*   r.   user_idr+   zError processing fleet: )total_countr   )r8   r9   r   strptimer<   r   r   findsortrL   rM   listr   
setdefaultr   r   appendr@   printcount_documents)rK   rL   rM   rN   rO   rP   rQ   rR   rS   rA   rB   vehicle_models_collectionqueryregex_querydate_filtersort_fields
sort_fieldsort_directioncursorr   formatted_fleetsfleetrF   rI   r`   r   r   r   get_fleets_serviced   sj   



rs   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 )Nr3   Invalid fleet IDr4   r)     Fleet not foundr*   rK   r.   r_   r   r+   vehicle_imageBASE_URLzhttp://localhost:8003/r-      r2   r0   r,   r1   r/   Unknownz"Error processing vehicle in fleet z: ErrorzError processing fleet r7   zError processing fleet data)r8   r9   r   r   r   r?   r   re   r   r   r   osgetenvr<   r@   rg   )r*   rA   rB   rC   fleet_object_idrr   rF   base_urlrG   rH   rI   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 )Nr3   rt   r4   r)   ru   rv   c                 S   s   i | ]\}}|d ur||qS r   r   ).0kvr   r   r   
<dictcomp>O  s    z(update_fleet_service.<locals>.<dictcomp>r&   r   r-   zVehicle model z
 not found$setr   r*   rK   r.   r_   r+   )r8   r9   r   r   r   r?   itemsr   r:   
update_onematched_countr   re   r   r   )r*   r#   rA   rB   rC   r   existing_fleetupdate_datarG   rE   updated_fleetrF   r   r   r   update_fleet_serviceB  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 )Nr3   rt   r4   r)   ru   rv   r   r-   z$pull	fleet_idsr*   rK   r.   r_   r+   )r8   r9   r   r   r   r?   r<   r   
delete_oner   re   r   r   r   )r*   rA   rB   rC   r   rr   rG   rF   r   r   r   delete_fleet_serviceu  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 )Nr3   rt   r4   r)   ru   rv   r   r-   r/   r0   r.   r,   r1   is_autonomousFr(   )r0   r,   r1   r   r(   )r8   r9   r   r   r   r?   r<   rf   )
r*   rA   rB   rC   r   rr   r   rG   rH   vehicle_datar   r   r   get_fleet_vehicles_service  s8   






r   r.   rj   rT   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 )NrK   rT   z$neTis_fleet_assignedrU   rV   rW   rz   c                 S   s&   g | ]}t |d  |dddqS )r)   rW   r.   )idrW   )r   r<   )r   fr   r   r   
<listcomp>  s   & z+get_fleet_dropdown_list.<locals>.<listcomp>)r8   reescaperb   )rA   rK   rj   rT   rB   filtersr   r   r   r   get_fleet_dropdown_list  s   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|dkr;tdd	d|d
tjkrItddd|	d|idtjt
 di t| |d|dd|t
 d}||  d| tjdS )Nr3   rt   r4   r)   ru   rv   rK     Not authorizedmaintenance_statuszFleet already under maintenancer   r   r&   r_   start)r*   rK   r_   actionreason
start_timez+Fleet marked under maintenance successfullymessager*   rO   )r8   MAINTENANCE_LOG_COLLECTIONr   r   r   r?   r<   FleetStatusMAINTENANCEr   r   r:   FleetMaintenanceLogr=   dict)	r*   r   current_userrA   rB   logs_collection	fleet_objrr   logr   r   r   $mark_fleet_under_maintenance_service  sF   	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|dkr;tdd	d|d
tjkrItddd|	d|idtj
t di |	| dd ddd|t di d| tj
dS )Nr3   rt   r4   r)   ru   rv   rK   r   r   r   zFleet is not under maintenancer   r   r   )r*   r   end_timeend)r   r   r   z+Fleet removed from maintenance successfullyr   )r8   r   r   r   r   r?   r<   r   r   r   ACTIVEr   r:   )r*   r   r   rA   rB   r   r   rr   r   r   r    unmark_fleet_maintenance_service   sL   r   )r.   r.   )'r}   jsonr   bsonr   bson.errorsr   pymongo.errorsr   fastapir   r   typingr   r	   r
   r   app.v1.services.sequencer   pymongor   r   r8   r9   r   JSONEncoderr   r   rJ   r   intrs   r   r   r   r   r   r   r   r   r   r   r   <module>   sX    
J	
 L3(( 4