
    ?h9:                     6   S SK Jr  S SKJrJrJr  S SKJr  S SKJr  S SK	J
r
Jr  S SKJr  S SKJr  SrS	\4S
 jrS\4S jrS\4S jrS\S\4S jrS\4S jrS\\   4S jrS\S\S\\   S\\   S\\   S\\   S\\   4S jrS\S\S\4S jrS\S\S\4S jrg )!    )HTTPException)IotDeviceCreateIotDeviceUpdateNearbyDevicesRequest)str_to_objectid)datetime)	ASCENDING
DESCENDING)Optional)ObjectIdiot_devicesid_strc                 t    U (       a  [        U [        5      (       d  g [        U 5      $ ! [         a     gf = f)zKReturn ObjectId if valid 24-hex string, else None (instead of raising 400).N)
isinstancestrr   	Exception)r   s    QC:\Suresh\moveshuttle\MDcreated\moveengine\app\v1\services\platform\iotdevices.pysafe_objectidr      s6    FC00 s   
* 
77devicec                    #    U R                  5       n[        R                  " 5       US'   U[           R	                  U5      n[        UR                  5      US'   U$ 7f)Ncreated_dateid)dictr   utcnowCOLLECTION_NAME
insert_oner   inserted_id)r   dbdataresults       r   create_iot_device_servicer!      sO     ;;=D#??,D ++D1FV''(DJKs   AA
account_idc                    #    U[            R                  S[        U 5      05      nU(       d
  [        SSS9e[	        US   5      US'   U$ 7f)N_idi  zIoT Device not found)status_codedetailr   )r   find_oner   r   r   r"   r   r   s      r   get_iot_device_servicer)      sL      ))5/*2M*NOF4JKKve}%F4LMs   AA
updatec                 b  #    UR                  SS9R                  5        VVs0 s H  u  p4X4_M	     nnn[        R                  " 5       US'   U[           R                  S[        U 5      0SU05      I S h  vN   SSKJn  U" U 5      I S h  vN   [        X5      I S h  vN $ s  snnf  N3 N N7f)NT)exclude_unsetlast_updatedr$   z$setr   )notify_nearby_subscribers)
r   itemsr   r   r   
update_oner   app.v1.sockets.tracking_datar.   r)   )r"   r*   r   kvupdate_datar.   s          r   update_iot_device_servicer5   *   s     $*KKdK$C$I$I$KL$KDA14$KKL"*//"3K
_

(
(	
+,v{.C  
 G
#J
///'
777 M 07s@   !B/B#AB/5B)6B/B+B/B-B/+B/-B/c                    #    [        X5      I S h  vN nU[           R                  S[        U 5      05      I S h  vN   U$  N1 N7f)Nr$   )r)   r   
delete_oner   r(   s      r   delete_iot_device_servicer8   8   sB     )*99F
_

(
(%1L)M
NNNM :Ns   AA*AAAAqc                   #    0 nU(       a  USS.n	SU	0SU	0/US'   U(       a  X8S'   U(       a  XHS'   U(       d  U(       aH  0 n
U(       a  [         R                  " US5      U
S	'   U(       a  [         R                  " US5      U
S
'   XS'   U[           R                  U5      R	                  U 5      R                  U5      n/ nU H%  n[        US   5      US'   UR                  U5        M'     U[           R                  U5      nXS.$ 7f)Niz$regexz$options
model_nameinstallation_details$ordevice_typestatus%Y-%m-%d$gte$lter   r$   r   )total_countusers)	r   strptimer   findskiplimitr   appendcount_documents)rI   rJ   r9   r@   rA   	date_fromdate_tor   filter_queryregex_querydate_filtercursordevicesdtotals                  r   list_iot_devices_servicerV   =   s    L!"4;'#[1
U
 &1]#!'XG"*"3"3Iz"JK"*"3"3GZ"HK'2^$ %%l388>DDUKFGah-$q  //=E 33s   DDrI   rJ   r@   rA   rM   rN   c           
      v   0 nU(       a  USS.n	SU	0SU	0/US'   U(       a  X8S'   U(       a  XHS'   U(       d  U(       aH  0 n
U(       a  [         R                  " US5      U
S	'   U(       a  [         R                  " US5      U
S
'   XS'   US   R                  U5      R                  U 5      R	                  U5      n/ nU GHa  n[        US   5      US'   UR                  S5      nUR                  S5      nS n[        U5      nUS:X  av  U(       ao  US   R                  SU05      nU(       aQ  S[        US   5      UR                  S5      UR                  S5      UR                  S5      UR                  S5      S.nOUS:X  a  U(       a~  US   R                  SU05      nU(       aa  S[        US   5      UR                  S5      UR                  S5      UR                  S5      UR                  S5      UR                  S5      S.nUUS'   UR                  U5        GMd     US   R                  U5      nUUS.$ ) Nr;   r<   r=   r>   r?   r@   rA   rB   rC   rD   r   r   r$   r   associated_entity_typeassociated_entity_idvehiclefleetsfleet
fleet_nameregistration_numbervehicle_typetypefleet_idr]   r^   r_   rA   	workforce
first_name	last_namemobile_numberemail_idra   workforce_idrd   re   rf   rg   rA   mapped_detailsrE   rS   )r   rG   rH   rI   rJ   r   getr   r'   rK   rL   )rI   rJ   r9   r@   rA   rM   rN   r   rO   rP   rQ   rR   rS   rT   associated_typeassociated_idmapped_dataoidr\   rc   rU   s                        r   %list_iot_devices_with_mapping_servicerq      s,    L!"4;'#[1
U
 &1]#!'XG"*"3"3Iz"JK"*"3"3GZ"HK'2^$##L166t<BB5IFGah-$%% 8945M*i'CxL))5#,7E# #E%L 1"'))L"9+0995J+K$)IIn$=#ii1 +;00%>I'$'	%(8$9"+--"=!*{!;%.]]?%C )j 9'mmH5 *
qG J }--l;E W55    latitude	longitude	radius_kmc                    SSX/S.SSUS-  SS0S	.0nU/nUS
   R                  U5      n/ nU GHb  n[        US   5      [        UR                  SS5      5      UR                  S5      (       a  [        UR                  SS5      5      OS UR                  S5      [        UR                  SS5      5      UR                  S5      UR                  SS5      UR                  S5      UR                  S5      UR                  S5      UR                  S5      [        UR                  SS5      S-  S5      UR                  S5      S.n	S n
[	        UR                  S5      5      nUR                  S5      nUS:X  av  U(       ao  US   R                  SU05      nU(       aQ  S[        US   5      UR                  S5      UR                  S5      UR                  S5      UR                  S5      S .n
OUS!:X  a  U(       a~  US!   R                  SU05      nU(       aa  S![        US   5      UR                  S"5      UR                  S#5      UR                  S$5      UR                  S%5      UR                  S5      S&.n
XS''   UR                  U	5        GMe     US(S)0/n[        US
   R                  U5      5      nU(       a  US   S)   OSnUUS*.$ )+N$geoNearPointra   coordinatesdistance_metersT  rA   activeneardistanceField	sphericalmaxDistancequeryr   r$   r"    user_idrX   rY   r@   r>   r-   r=   uuidr      last_locationr   r"   r   rX   rY   r@   r>   rA   r-   r=   r   distance_kmr   rZ   r[   r\   r]   r^   r_   r`   rc   rd   re   rf   rg   rh   rj   $countrU   rk   	aggregater   rl   roundr   r'   rK   listrs   rt   ru   r   base_geo_querypipelinerR   rS   rT   device_inforo   rp   rm   r\   rc   count_pipelinecount_resultrU   s                     r   list_nearby_devices_servicer      s    	$i5JK.$t+)
N H((2FGah-aeeL"5645EE)4D4Ds155B/0$&'ee,D&E$'.Db(I$J55/$%EE*@"$EeeHoEE.1%%-EE&M !'8!!<t!CQGUU?3
& AEE"89:%% 89i'CxL))5#,7E# #E%L 1"'))L"9+0995J+K$)IIn$=#ii1 +;00%>I'$'	%(8$9"+--"=!*{!;%.]]?%C )j 9'mmH5 )4$%{#e j %x&9:N=)33NCDL(4LOG$!E W55rr   c                    SSX/S.SSSSS0S	.0nU/nUS
   R                  U5      n/ nU GHb  n[        US   5      [        UR                  SS5      5      UR                  S5      (       a  [        UR                  SS5      5      OS UR                  S5      [        UR                  SS5      5      UR                  S5      UR                  SS5      UR                  S5      UR                  S5      UR                  S5      UR                  S5      [        UR                  SS5      S-  S5      UR                  S5      S.n	S n
[	        UR                  S5      5      nUR                  S5      nUS:X  av  U(       ao  US   R                  SU05      nU(       aQ  S[        US   5      UR                  S5      UR                  S5      UR                  S 5      UR                  S5      S!.n
OUS":X  a  U(       a~  US"   R                  SU05      nU(       aa  S"[        US   5      UR                  S#5      UR                  S$5      UR                  S%5      UR                  S&5      UR                  S5      S'.n
XS('   UR                  U	5        GMe     US)S*0/n[        US
   R                  U5      5      nU(       a  US   S*   OSnUUS+.$ ),Nrw   rx   ry   r{   Ti@B rA   r}   r~   r   r$   r"   r   r   rX   rY   r@   r>   r-   r=   r   r   r|   r   r   r   rZ   r[   r\   r]   r^   r_   r`   rc   rd   re   rf   rg   rh   rj   r   rU   rk   r   r   s                     r   "list_nearby_devices_service_socketr   E  s    	$i5JK.&)
N H((2FGah-aeeL"5645EE)4D4Ds155B/0$&'ee,D&E$'.Db(I$J55/$%EE*@"$EeeHoEE.1%%-EE&M '8!!<t!CQGUU?3
  AEE"89:%% 89i'CxL))5#,7E# #E%L 1"'))L"9+0995J+K$)IIn$=#ii1 +;00%>I'$'	%(8$9"+--"=!*{!;%.]]?%C )j 9'mmH5 )4$%{#_ b %x&9:N=)33NCDL(4LOG$!E W55rr   N)fastapir   !app.v1.models.platform.iotdevicesr   r   r   app.v1.libraries.objectr   r   pymongor	   r
   typingr   bsonr   r   r   r   r!   r)   r5   r8   rV   intrq   floatr   r    rr   r   <module>r      s!   ! c c 3  )  # O S 8 8_ 8 
 48C=  4XJ6
J6J6 }J6 #	J6
 SMJ6 }J6 c]J6ZM6M6M6 M6^I6I6I6 I6rr   