o
    9h%                  &   @   s  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 d dlmZ d dlmZmZ d	Zd
ZdedejdefddZdedejdee fddZ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e dee dee dee ded ed!ee d"ee d#ee dejdef&d$d%Zded&e	dejdefd'd(Zdedejdefd)d*Zd+edejdefd,d-Zded.edejdefd/d0Zd1S )2    )datetime)ObjectId)Optional)database)
TaskCreate
TaskUpdate)
Collection)get_next_sequence_value_int)	ASCENDING
DESCENDINGtasks	waypointstaskdbreturnc           
   
   C   s  |   }t |d< |dr8|d dt|d i}|r8|d|d|d|dt|d d	|d
< |drf|d dt|d i}|rf|d|d|d|dt|d d|d< |dr|d dt|d i}|r|dt|d d|d< td||d< |t 	|}t|j
|d< |dg }|D ](}t|j
|d |d |d |d|d|dt d}	|t 	|	 q|S ) 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waypoint r<   :/var/www/html/moveengine/app/v1/services/platform/tasks.pycreate_task_service   sT   



	


	


r>   r$   c                 C   s2   |t  dt| i}|rt|d |d< |S d S )Nr   r$   )r1   r/   r   r0   r$   r   r   r<   r<   r=   get_task_serviceF   s
   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                 C   s(  d| i}|r
||d< |r||d< |r||d< |d ur||d< |r$||d< |r*||d< |	r0|	|d< |
r6|
|d	< |r<||d
< |rS|dd}d|id|id|id|ig|d< |sW|rqi }|rct |d|d< |rmt |d|d< ||d< dddddd}||d}|dkrtnt}|t ||||	|}g }|D ]}i dt
|d d|dd
|d
d|ddd|dp|di dd|dd|dd|dd|dd	|d	dd|ddd|dd d|dd!d|dd"d#|d#d$|d$d%|d%i d&|d&g d'|d'd|dd|dd(|d(d)|d)d*|d*i d+|d+i d,|d,i d-|d-dd.|d.p_d d/|d/dd0|d0pod d1|d1dd2|d2dd3|d3d}|| qt||d4S )5NrA   rB   rC   rD   rE   r   r   r   rH   rN   i)z$regexz$optionsr   z$orz%Y-%m-%dz$gtez$lter   capacity)rC   rD   rP   rE   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   strptimer.   r
   r   r1   findsortrJ   rK   r0   appendlen)rA   rB   rC   rD   rE   rF   rG   r   r   r   rH   rI   rJ   rK   rL   rM   rN   r   queryregex_query
date_querysort_fields
sort_fieldsort_directioncursorresultsdocr   r<   r<   r=   list_tasks_serviceM   s   
"






	








 !#rq   updatec                 C   s<   dd |   D }|t dt| id|i t| |S )Nc                 S   s   i | ]\}}|d ur||qS )Nr<   ).0kvr<   r<   r=   
<dictcomp>   s    z'update_task_service.<locals>.<dictcomp>r   $set)r,   itemsr1   
update_oner   r@   )r$   rr   r   updatesr<   r<   r=   update_task_service   s   
r{   c                 C   s(   t | |}|r|t dt| i |S )Nr   )r@   r1   
delete_oner   r?   r<   r<   r=   delete_task_service   s   
r}   payloadc                 C   s   i }d| v r| d |d< nd| v r| d |d< nd| v r#| d |d< nt d|d }||}|i |ddi}|i |ddi}|||d	S )
Nr   r   r   z:One of customer_id, workforce_id, or fleet_id is required.r   rH   	completed	cancelled)total_taskscompleted_taskscancelled_tasks)
ValueErrorcount_documents)r~   r   rh   
collectiontotalr   r   r<   r<   r=   get_task_summary_service   s    
r   task_statusc                 C   s<   |t  dt| iddt|ii}|jdkrd S t| |S )Nr   rw   r   r   )r1   ry   r   intmatched_countr@   )r$   r   r   r8   r<   r<   r=   update_task_status_service   s   


r   N)r   bsonr   typingr   app.dbr   app.v1.models.platform.tasksr   r   pymongo.collectionr   app.v1.services.sequencer	   pymongor
   r   r1   r4   MongoDBr,   r>   r0   r@   boolr   rq   r{   r}   r   r   r<   r<   r<   r=   <module>   sn    9	

z "