o
    Ah                  $   @   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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.d/Zd0S )1    )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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)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   sP   



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

	

r<   r$   c                 C   s2   |t  dt| i}|rt|d |d< |S d S )Nr   r$   )r/   r-   r   r.   r$   r   r   r:   r:   r;   get_task_serviceD   s
   r>   
account_id
service_id	task_modepriority	roundtrip	from_dateto_dater   r   r   statusqskiplimitsort_by
sort_orderc                 C   sZ  d| i}|r
||d< |r||d< |r||d< |d ur||d< |r$||d< |r*||d< |	r0|	|d< |
r6|
|d	< |rM|d
d}d|id|id|id|ig|d< |sQ|rki }|r]t |d|d< |rgt |d|d< ||d< dddddd}||d}|dkrtnt}|t ||||	|}g }|D ]}t
|d |d< || qt||dS )Nr?   r@   rA   rB   rC   r   r   r   rF   i)z$regexz$optionsr   z$orz%Y-%m-%dz$gtez$lter   capacity)rA   rB   rM   rC   r   ascr   r$   )total_countusers)r   strptimer,   r
   r   r/   findsortrH   rI   r.   appendlen)r?   r@   rA   rB   rC   rD   rE   r   r   r   rF   rG   rH   rI   rJ   rK   r   queryregex_query
date_querysort_fields
sort_fieldsort_directioncursorresultsdocr:   r:   r;   list_tasks_serviceK   sZ   
"r_   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*   itemsr/   
update_oner   r>   )r$   r`   r   updatesr:   r:   r;   update_task_service   s   
ri   c                 C   s(   t | |}|r|t dt| i |S )Nr   )r>   r/   
delete_oner   r=   r:   r:   r;   delete_task_service   s   
rk   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   rF   	completed	cancelled)total_taskscompleted_taskscancelled_tasks)
ValueErrorcount_documents)rl   r   rV   
collectiontotalrm   rn   r:   r:   r;   get_task_summary_service   s    
rv   task_statusc                 C   s<   |t  dt| iddt|ii}|jdkrd S t| |S )Nr   re   rw   r   )r/   rg   r   intmatched_countr>   )r$   rw   r   r6   r:   r:   r;   update_task_status_service   s   


rz   N)r   bsonr   typingr   app.dbr   app.v1.models.platform.tasksr   r   pymongo.collectionr   app.v1.services.sequencer	   pymongor
   r   r/   r2   MongoDBr*   r<   r.   r>   boolrx   r_   ri   rk   rv   rz   r:   r:   r:   r;   <module>   sj    7	

M 