
    9h%              &       <   S SK J r   S SK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 SKJrJr  S	rS
rS\S\R&                  S\4S jrS\S\R&                  S\\   4S jrS\S\\   S\\   S\\   S\\   S\\   S\\   S\\   S\\   S\\   S\\   S\\   S\S\S\\   S \\   S!\\   S\R&                  S\4&S" jrS\S#\	S\R&                  S\4S$ jrS\S\R&                  S\4S% jrS&\S\R&                  S\4S' jrS\S(\S\R&                  S\4S) jrg*)+    )datetime)ObjectId)Optional)database)
TaskCreate
TaskUpdate)
Collection)get_next_sequence_value_int)	ASCENDING
DESCENDINGtasks	waypointstaskdbreturnc           
         U R                  5       n[        R                  " 5       US'   UR                  S5      (       a|  US   R	                  S[        US   5      05      nU(       aS  UR                  S5      UR                  S5      UR                  S5      UR                  S5      [        US   5      S	.US
'   UR                  S5      (       a|  US   R	                  S[        US   5      05      nU(       aS  UR                  S5      UR                  S5      UR                  S5      UR                  S5      [        US   5      S.US'   UR                  S5      (       aL  US   R	                  S[        US   5      05      nU(       a#  UR                  S5      [        US   5      S.US'   [        SU5      US'   U[           R                  U5      n[        UR                  5      US'   UR                  S/ 5      nU H  n[        UR                  5      US   US   US   UR                  S5      UR                  S5      UR                  S5      [        R                  " 5       S.n	U[           R                  U	5        M     U$ ) Ncreated_datecustomer_id	customers_id
first_name	last_namephoneemail)r   r   r   r   r   customer_infoworkforce_id	workforcemobile_numberemail_id)r   r   r   r   r   workforce_infofleet_idfleets
fleet_name)r#   r!   
fleet_infot_idtask_id
task_stopslocationtypesequencetiminglocation_coordsdrop_location_coords)r&   r(   r)   r*   r+   r,   r-   r   )dictr   utcnowgetfind_oner   strr
   
COLLECTION
insert_oneinserted_idWAYPOINT_COLLECTION)
r   r   datacustomerr   fleetresultwaypoints_datawpwaypoints
             LC:\Suresh\moveshuttle\MDcreated\moveengine\app\v1\services\platform\tasks.pycreate_task_servicer?      sF   99;D#??,D xxk?++UHT-=P4Q,RS&ll<8%\\+6!g.!g."8E?3%D! xx{O,,eXd>>R5S-TU	'mmL9&]];7!*!?%MM*5 #Ie$4 5&D!" xx
8%%uhtJ7G.H&IJ#ii5e-"D /vr:DL
^&&t,F&,,-DO XXlB/N6--.:vJ:ffX&!vv&78$&FF+A$B$OO-	
 	**84  K    r&   c                 ~    U[            R                  S[        U 5      05      nU(       a  [        US   5      US'   U$ g )Nr   r&   )r3   r1   r   r2   r&   r   r   s      r>   get_task_servicerC   F   s=    j>""E8G+<#=>Dd5k*Yr@   
account_id
service_id	task_modepriority	roundtrip	from_dateto_dater   r   r!   statusqskiplimitsort_by
sort_orderschedule_idc                 6   SU 0nU(       a  UUS'   U(       a  UUS'   U(       a  UUS'   Ub  UUS'   U(       a  UUS'   U(       a  UUS'   U	(       a  U	US'   U
(       a  U
US	'   U(       a  UUS
'   U(       a  USS.nSU0SU0SU0SU0/US'   U(       d  U(       aI  0 nU(       a  [         R                  " US5      US'   U(       a  [         R                  " US5      US'   UUS'   SSSSSS.nUR                  US5      nUS:X  a  [        O[        nU[
           R                  U5      R                  UU5      R                  U5      R                  U5      n/ nU GH  n0 S[        US   5      _SUR                  S5      _S
UR                  S
5      _SUR                  SS5      _SUR                  S5      =(       d!    UR                  S0 5      R                  S5      _SUR                  S5      _SUR                  S5      _SUR                  S5      _SUR                  S5      _S	UR                  S	S5      _SUR                  SS5      _SUR                  SS 5      _SUR                  SS!5      _SUR                  SS"5      _S#UR                  S#5      _S$UR                  S$5      _S%UR                  S%5      _0 S&UR                  S&/ 5      _S'UR                  S'5      _SUR                  S5      _SUR                  S5      _S(UR                  S(5      _S)UR                  S)5      _S*UR                  S*0 5      _S+UR                  S+0 5      _S,UR                  S,0 5      _S-UR                  S-S5      _S.UR                  S.5      =(       d    S _S/UR                  S/S5      _S0UR                  S05      =(       d    S _S1UR                  S1S5      _S2UR                  S2S5      _S3UR                  S3S5      _EnUR                  U5        GM     [        U5      US4.$ )5NrD   rE   rF   rG   rH   r   r   r!   rK   rQ   i)z$regexz$optionsr   z$orz%Y-%m-%dz$gtez$lter   capacity)rF   rG   rT   rH   r   ascr&   r    r   scheduled_startscheduled_endactual_start
actual_endpending	schedulednormalFr   
time_spentdistance_travelledcostr'   r%   r    r$   	variablesaddons	checklistr(   r,   drop_locationr-   r+   r)   r*   )total_countusers)r   strptimer0   r   r   r3   findsortrM   rN   r2   appendlen)rD   rE   rF   rG   rH   rI   rJ   r   r   r!   rK   rL   rM   rN   rO   rP   rQ   r   queryregex_query
date_querysort_fields
sort_fieldsort_directioncursorresultsdocr   s                               r>   list_tasks_serviceru   M   s   ( :&E(l&k$j&k*m ,n$j h*m!"4;'k"%+&	
e G
!)!2!29j!IJv!)!2!27J!GJv *n ! &K .9J","5Y:N
^  ',,ZHMMdSYYZ_`F G"
s3u:"
#'',/"
 377=1"
 #'',3	"

 377=1dSWW_b5Q5U5UVc5d"
 sww'89"
 SWW_5"
 CGGN3"
 #'',/"
 cggh	2"
 k:"
 
H5"
 e4"
 
A."
 #'',/"
  !#''*>"?!"
" CGGFO#"
$ #'',3%"
& CGGFO'"
( CGGN3)"
* SWW_5+"
, cgg&67-"
. #'',//"
0 b11"
2 cggh+3"
4 b15"
6 
B/7"
8 sww'89AT9"
: SWW_b9;"
< #CGG,B$C$Kt="
> cggh+?"
@ CGGFB'A"
B 
B/C"
F 	tK N w<'::r@   updatec                     UR                  5       R                  5        VVs0 s H  u  p4Uc  M
  X4_M     nnnU[           R                  S[	        U 5      0SU05        [        X5      $ s  snnf )Nr   $set)r.   itemsr3   
update_oner   rC   )r&   rv   r   kvupdatess         r>   update_task_servicer~      sc     & 3 3 5G 5tqt 5GGzNuhw&7867:KLG(( Hs
   	A)A)c                 p    [        X5      nU(       a#  U[           R                  S[        U 5      05        U$ )Nr   )rC   r3   
delete_oner   rB   s      r>   delete_task_servicer      s0    G(D
:!!5(7*;"<=Kr@   payloadc                 
   0 nSU ;   a	  U S   US'   O)SU ;   a	  U S   US'   OSU ;   a	  U S   US'   O[        S5      eUS   nUR                  U5      nUR                  0 UESS0E5      nUR                  0 UESS0E5      nUUUS	.$ )
Nr   r   r!   z:One of customer_id, workforce_id, or fleet_id is required.r   rK   	completed	cancelled)total_taskscompleted_taskscancelled_tasks)
ValueErrorcount_documents)r   r   rl   
collectiontotalr   r   s          r>   get_task_summary_servicer      s    E&}5m	7	" ' 7n	w	#J/jUVVGJ&&u-E**+Ke+KX{+KLI**+Ke+KX{+KLI $$ r@   task_statusc                     U[            R                  S[        U 5      0SS[        U5      005      nUR                  S:X  a  g [        X5      $ )Nr   rx   r   r   )r3   rz   r   intmatched_countrC   )r&   r   r   r:   s       r>   update_task_status_servicer      sS    
^&&	!"	-[!123F q G((r@   N)r   bsonr   typingr   app.dbr   app.v1.models.platform.tasksr   r   pymongo.collectionr	   app.v1.services.sequencer
   pymongor   r   r3   r6   MongoDBr.   r?   r2   rC   boolr   ru   r~   r   r   r    r@   r>   <module>r      s       ? ) @ )
! 7j 7h.>.> 74 7rc x'7'7 HTN w;w;w; }w; sm	w;
 ~w; }w; c]w; #w; 3-w; smw; SMw; }w; w; w; c]w;  !w;" ##w;$ 	%w;& 
'w;t) )j )h>N>N )SW )
 (*:*: t d 0@0@ T D) )# )8CSCS )X\ )r@   