o
    Ah3                     @   s  d dl m Z  d dlmZ d dlmZmZ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Zd
ZdZdZ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dedejdefddZ	 																			d6dede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 fd*d+Zdeded&edejde f
d,d-Z!				d7ded!e
e fd.d/Z"ded0edejdefd1d2Z#d3edejdefd4d5Z$d	S )8    )datetime)ObjectId)ScheduleCreateScheduleUpdateScheduleWithTasksCreate)database)Optional)	ASCENDING
DESCENDING)get_next_sequence_value_int)connected_clientsN	schedules	workforcefleetstasksschedule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< |S )Ncreated_datecustomer_id	customers_id
first_name	last_namephoneemailr   r   r   r   r   customer_infoworkforce_idr   mobile_numberemail_id)r   r   r   r    r   workforce_infofleet_idr   
fleet_name)r#   r"   
fleet_infosch_idschedule_id)dictr   utcnowgetfind_oner   strr   SCHEDULES_COLLECTION
insert_oneinserted_id)r   r   datacustomerr   fleetresult r3   >/var/www/html/moveengine/app/v1/services/platform/schedules.pycreate_schedule_service   s<   



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

	

r5   r&   c                 C   s2   |t  dt| i}|rt|d |d< |S d S )Nr   r&   )r,   r*   r   r+   r&   r   r   r3   r3   r4   get_schedule_service;   s
   r7   updatec                 C   s<   dd |   D }|t dt| id|i t| |S )Nc                 S   s   i | ]\}}|d ur||qS )Nr3   ).0kvr3   r3   r4   
<dictcomp>L   s    z+update_schedule_service.<locals>.<dictcomp>r   $set)r'   itemsr,   
update_oner   r7   )r&   r8   r   updatesr3   r3   r4   update_schedule_serviceK   s   
rA   c                 C   s(   t | |}|r|t dt| i |S )Nr   )r7   r,   
delete_oner   r6   r3   r3   r4   delete_schedule_serviceP   s   
rC   
   r      
account_idskiplimitsearch_querystatusstart_date_fromstart_date_tor   r   r"   sort_byorder_byc                 C   s  d| i}|r|dd|d< |r||d< |s|r1i }|r#t |d|d< |r-t |d|d< ||d	< |r7||d
< |r=||d< |	rC|	|d< ddddd	d}||
d	}|dkrWtnt}|d |||||}|d 	|}g }|D ]}t
|d |d< || qu||dS )NrF   iz$regexz$optionsschedule_namerJ   z%Y-%m-%dz$gtez$lter   r   r   r"   description
start_timeend_time)rQ   rR   rS   rT   r   r   r   r   r&   )total_countr   )r   strptimer)   r	   r
   findsortrG   rH   count_documentsr+   append)rF   rG   rH   rI   rJ   rK   rL   r   r   r"   rM   rN   r   querydate_filterallowed_sort_fields
sort_fieldsort_directioncursorrU   resultsdocr3   r3   r4   list_schedules_serviceW   sB   "
rc   c           	   
   C   s*  |d  t| |d}|d  t||d}|r|sdS |t dt| idd|ii |t dt|idd| ii |t d| idd|ii |t d| idd|ii t	|}|rd	d
| d}zt
|t| W dS  ty } ztd| d|  W Y d }~dS d }~ww dS )Nr   )r   rF   r   Fr   r=   r   r&   schedule_assignmentz(A new schedule has been assigned to you.)typemessager&   z#WebSocket send error for workforce z: T)r*   r   r,   r?   WORKFORCE_COLLECTIONFLEETS_COLLECTIONupdate_manyTASKS_COLLECTIONr   r)   asynciocreate_task	send_textjsondumps	Exceptionprint)	r&   rF   r   r   r   r   	websocketnotificationer3   r3   r4   assign_schedule_service   sF   






ru   c                 C   sd   d| i}|r|dd|d< |d  |dddd}g }|D ]}|t|d	 |d d
 q|S )NrF   rO   rP   rQ   r   rE   )r   rQ   2   r   )r&   rQ   )rW   rH   rZ   r+   )rF   rI   r   r[   r`   ra   rb   r3   r3   r4   search_schedules_select_service   s   

rw   travel_statusc                 C   s<   |t  dt| iddt|ii}|jdkrd S t| |S )Nr   r=   rx   r   )r,   r?   r   intmatched_countr7   )r&   rx   r   r2   r3   r3   r4   update_travel_status_service   s   


r{   payloadc              	   C   sN  dt  d }ddlm} t| j|| j| j| j	g d}|
||}| jr*| jndddd dd	d
dd dg}g }|D ]R}|d | j|j|j|j|jt  d}	t|dd r|d dt|ji}
|
r|
d|
d|
d|
dt|
d d|	d< |t |	}|t|j q<|t dt|d idd|ii ||d< |S )Nmovex_z%Y%m%d_%H%M%SrE   )r   )rF   rQ   rR   rS   rT   task_idszDefault Pickup Locationpickup)locationre   sequencetimingzDefault Drop Locationdropoff   r&   )r&   rF   r   re   r   r   r   r   r   r   r   r   r   r   r   r   r=   r~   )r   r(   strftime r   r   rF   rR   rS   rT   r5   
task_stopsr   re   r   r   getattrr*   r   r   r)   r+   rj   r-   rZ   r.   r,   r?   )r|   r   rQ   schedule_serviceschedule_datar   
stops_datar~   stopstop_docr0   r2   r3   r3   r4   "create_schedule_with_tasks_service1  sd   


r   )r   rD   NNNNNNNr   rE   N)NN)%r   bsonr    app.v1.models.platform.schedulesr   r   r   app.dbr   typingr   pymongor	   r
   app.v1.services.sequencer   app.utils.connectionsr   rk   r,   rg   rh   rj   MongoDBr'   r5   r+   r7   rA   rC   ry   rc   boolru   rw   r{   r   r3   r3   r3   r4   <module>   s    +		

 Z-
@