o
    fWÈhž#  ã                &   @   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r…t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.d¡“d/| d/d¡“d0| d0d¡“d1| d1d¡“d2| d2d¡“d3| d3d¡“¥}| |¡ qœt|ƒ|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 