o
    Ah|2                  ,   @   s  d dl Z d dlmZmZmZmZmZmZmZ d dl	m
Z
 d dlmZmZmZmZ d dlmZmZ d dlm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mZmZmZm Z m!Z! d dl"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( e Z)e)j*dededededededededededededededededededededeej+eefde,dee, de,dee, dee, dee, dee, dee, dee- dedee, dee dee, dee, dee, dee, dee, d e,d!ee, d"ej.d#e/f*d$d%Z0e)j1d&edd d'dddddd(eej+eef
d)e,d*e-d+e-d,ee, dee, d-ee, d.ee, d/ee, d0ee, d"ej.d#e/fd1d2Z2e)j1d3edeej+eefd4e,d"ej.d#e/fd5d6Z3e)j4d3edeej+eefd4e,d7e d"ej.d#e/fd8d9Z5e)j6d3edeej+eefd4e,d"ej.d#e/fd:d;Z7e)j*d<edeej+eefd4e,d=e!d"ej.d#e/fd>d?Z8e)j1d<eee,ef  deej+eefd4e,d"ej.d#e/fd@dAZ9e)j1dBee,ef deej+eefd4e,de,d"ej.d#e/fdCdDZ:e)j4dBedeej+eefd4e,de,dEee,ef d"ej.d#e/f
dFdGZ;e)j6dBedeej+eefd4e,de,d"ej.d#e/fdHdIZ<e)j1dJeee,e,f  deej+eeedKdLdMedKdNdMfd"ej.d#e/d,e,dOe,fdPdQZ=dS )R    N)	APIRouterDependsHTTPExceptionQueryFormFile
UploadFile)JSONResponse)OptionalListDictAny)datetimedate)ObjectId)Path)database)get_current_userdetails)Fleet	FleetBaseFleetCreateFleetResponseListFleetUpdateVehicleBase)create_fleet_serviceget_fleets_serviceread_fleet_serviceupdate_fleet_servicedelete_fleet_serviceget_fleet_vehicles_service/)response_model.
fleet_namedescriptionstatus
vehicle_idregistration_number
vin_numbervehicle_model_idcoloryearvehicle_imageinsurance_numberinsurance_expiry	vendor_id	dealer_id	fuel_typevehicle_typecapacityvendor_nametag_namedbcurrent_userc                    s  t d}|jddd d }|	rN|	jrNtt  }|	jdd }d| d| }|| }t|d}|	|	
 I d H  W d    n1 sIw   Y  |rUd| nd }i d	| d
|d|d|d|d|d|d|d|d|d|
d|r| nd d|d|d|d|d||||dd|ddd}t||}|d drd|d d  |d d< td |d d!d"d#S )$Nzpublic/fleetsT)parentsexist_ok.zfleet-wbzpublic/fleets/r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   
account_id user_id)r3   r4   r<   r>   
fleet_datazhttp://localhost:8000/zFleet created successfully)messagefleet   )contentstatus_code)r   mkdirfilenameintr   now	timestampsplitopenwriteread	isoformatgetr   r	   )r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   FLEET_IMG_PATHimage_filenamerI   extfilepathfvehicle_image_pathr?   result rW   :/var/www/html/moveengine/app/v1/routers/platform/fleets.pycreate_fleet_endpoint/   sx   
	



rY   z/list/{account_id}/
   ascr<   skiplimitqcreated_date_fromcreated_date_tosort_by
sort_orderc                    s@   | dkr| |
 ddkrtdddt| |||||||||	
S )Nallr<   r=     Not authorizedrD   detail)rO   r   r   )r<   r\   r]   r^   r$   r_   r`   ra   rb   r5   r6   rW   rW   rX   
get_fleetsy   s   rh   z/{fleet_id}fleet_idc                    sB   t d t| |}|dr|d |ddkrtddd|S )N146146146146146146146r<   r=   rd   re   rf   )printr   rO   r   ri   r5   r6   rA   rW   rW   rX   
read_fleet   s   
rm   r?   c                    sJ   t | |}|dr|d |ddkrtdddt| |jdd|S )Nr<   r=   rd   re   rf   T)exclude_unset)r   rO   r   r   
model_dump)ri   r?   r5   r6   existing_fleetrW   rW   rX   update_fleet   s
   
rq   c                    s@   t | |}|dr|d |ddkrtdddt| |S Nr<   r=   rd   re   rf   )r   rO   r   r   )ri   r5   r6   rp   rW   rW   rX   delete_fleet   s
   

rs   z/{fleet_id}/vehiclesvehiclec                    s   t | |}|d|ddkrtddd|jdt jis(tdddt fd	d
|dg D r=tddd  }|j	
dt| id|idt id}|jdkr`tddd|j
dt jidd| ii t | |S )Nr<   r=   rd   re   rf   _id  zVehicle model not foundc                 3   s    | ]
}|d   j kV  qdS r%   Nr%   .0vrt   rW   rX   	<genexpr>   s    z'add_vehicle_to_fleet.<locals>.<genexpr>vehicles  z'Vehicle ID already exists in this fleetupdated_date)z$push$setr   zFailed to add vehiclez	$addToSet	fleet_ids)r   rO   r   r~   find_oner   r(   anyro   fleets
update_oner   utcnowmodified_count)ri   rt   r5   r6   rA   vehicle_datarV   rW   r|   rX   add_vehicle_to_fleet   s,   





r   c                    s8   t | |}|d|ddkrtdddt| |S rr   )r   rO   r   r   rl   rW   rW   rX   get_fleet_vehicles   s
   

r   z!/{fleet_id}/vehicles/{vehicle_id}c                    s   t | |}|d|ddkrtdddt fdd|dg D d }|s/td	d
d|jdt|d i}|r[|dd|dd|dd|dd|ddd|d< |S )Nr<   r=   rd   re   rf   c                 3        | ]}|d   kr|V  qdS rw   rW   ry   rx   rW   rX   r}          z$get_fleet_vehicle.<locals>.<genexpr>r~   rv   Vehicle not found in fleetru   r(   manufacturer_namer1   r0   is_autonomousFcan_fly)r   r1   r0   r   r   model_details)r   rO   r   nextr~   r   r   )ri   r%   r5   r6   rA   rt   modelrW   rx   rX   get_fleet_vehicle   s    
 





r   r   c           	         s   t | |}|d|ddkrtdddt fddt|d D d }|d u r1td	d
d|d }i || |d i||< |jdt| id|t	 di}|j
dkr`tdddt | |S )Nr<   r=   rd   re   rf   c                 3   s$    | ]\}}|d   kr|V  qdS rw   rW   )rz   ir{   rx   rW   rX   r}     s   " z'update_fleet_vehicle.<locals>.<genexpr>r~   rv   r   r%   ru   r   )r~   r   r   r   zFailed to update vehicle)r   rO   r   r   	enumerater   r   r   r   r   r   )	ri   r%   r   r5   r6   rA   vehicle_indexupdated_vehiclesrV   rW   rx   rX   update_fleet_vehicle   s4   
 




r   c                    s   t | |}|d|ddkrtdddt fdd|dg D d }|s/td	d
d|jdt| idd iidt id}|j	dkrPtddd|j
dt|d idd| ii t | |S )Nr<   r=   rd   re   rf   c                 3   r   rw   rW   ry   rx   rW   rX   r}   1  r   z,remove_vehicle_from_fleet.<locals>.<genexpr>r~   rv   r   ru   r%   r   )$pullr   r   r   zFailed to remove vehicler(   r   r   )r   rO   r   r   r   r   r   r   r   r   r~   )ri   r%   r5   r6   rA   rt   rV   rW   rx   rX   remove_vehicle_from_fleet&  s(   
 





r   z/dropdown/vehiclesr=   zSearch query for fleet name)defaultr#   z
Search allrc   c                    s   |d }t | |||S )Nr<   )get_fleet_dropdown_list)r5   r6   r^   rc   r<   rW   rW   rX   get_vehicle_dropdown_listG  s   r   )>osfastapir   r   r   r   r   r   r   fastapi.responsesr	   typingr
   r   r   r   r   r   bsonr   repathlibr   app.dbr   app.v1.dependencies.authr   app.v1.models.platform.fleetsr   r   r   r   r   r   app.v1.services.platform.fleetsr   r   r   r   r   r   routerpostget_mongo_dbstrrG   MongoDBdictrY   rO   rh   rm   putrq   deleters   r   r   r   r   r   r   rW   rW   rW   rX   <module>   s   $  		
I	
#
% 

