o
    øUÈhx]  ã                   @   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	 																			d8d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!				d9d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$d3edejdefd6d7„Z%d	S ):é    )Ú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}tdƒ t|ƒ |d  |¡ ||¡ |¡ 	|¡}|d  
|¡}g }|D ]}t|d ƒ|d< | |¡ q}||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   Úqueryqueryqueryqueryr   r   r&   )Útotal_countr   )r   Ústrptimer)   r	   r
   ÚprintÚ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ÚcursorrV   ÚresultsÚdocr3   r3   r4   Úlist_schedules_serviceW   sF   û"
re   c                 C   s.  |d   t| ƒ|dœ¡}|d   t|ƒ|dœ¡}|r|sdS | d¡| d¡| d¡| d¡| d	¡| d
¡| d¡| d¡| d¡| d¡dœ
}|d   |ddœ¡}d }|rŒ| d¡rŒ|t   dt|d ƒi¡}	|	rŒ|	 d¡t|	 d¡ƒ|	 d¡|	 d¡|	 d¡|	 d¡|	 d¡dœ}||dœ}
|r—||
d< |t  dt| ƒid|
i¡ |t  dt|ƒidd| ii¡ |t  d| idd |ii¡ ||dœ}|rÎ||d< |t	  d| id|i¡ t
 |¡}|rd!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    ÚgenderÚemergency_contactÚaddressÚblood_groupÚis_humanÚphoto)
r   r   r   r    rf   rg   rh   ri   rj   rk   Úworkforce_vehicleT)r   rJ   Ú
vehicle_idr   r#   Úregistration_numberÚcolorÚvehicle_imageÚ	fuel_typeÚvehicle_type)r#   rm   rn   ro   rp   rq   rr   )r   r!   r$   r=   r&   r   Úschedule_assignmentz(A new schedule has been assigned to you.)ÚtypeÚmessager&   z#WebSocket send error for workforce z: )r*   r   r)   ÚFLEETS_COLLECTIONr+   r,   r?   ÚWORKFORCE_COLLECTIONÚupdate_manyÚTASKS_COLLECTIONr   ÚasyncioÚcreate_taskÚ	send_textÚjsonÚdumpsÚ	ExceptionrX   )r&   rF   r   r   r   r   r!   rl   r$   r1   Úupdate_fieldsÚtask_update_fieldsÚ	websocketÚnotificationÚer3   r3   r4   Úassign_schedule_serviceÞ   s†   öÿù

þ

þ
þ
þ
ýý€ýr…   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   )rY   rH   r\   r+   )rF   rI   r   r]   rb   rc   rd   r3   r3   r4   Úsearch_schedules_select_service5  s   

þr‡   Útravel_statusc                 C   s<   |t   dt| ƒiddt|ƒii¡}|jdkrd S t| |ƒS )Nr   r=   rˆ   r   )r,   r?   r   ÚintÚmatched_countr7   )r&   rˆ   r   r2   r3   r3   r4   Úupdate_travel_status_serviceJ  s   
þ

r‹   Úpayloadc                 C   s^  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ddd d	œg}g }|D ]V}|d | j|j|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_ú%Y%m%d_%H%M%SrE   ©r   ©rF   rQ   rR   rS   rT   Útask_idszDefault Pickup LocationzDefault Pickup CoordinatesÚpickup)ÚlocationÚlocation_coordsÚdrop_location_coordsrt   ÚsequenceÚtimingzDefault Drop LocationÚdropoffé   r&   )	r&   rF   r“   r”   r•   rt   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“   r”   r•   rt   r–   r—   Úgetattrr*   r   r   r)   r+   ry   r-   r\   r.   r,   r?   )rŒ   r   rQ   Úschedule_serviceÚschedule_datar   Ú
stops_datar‘   ÚstopÚstop_docr0   r2   r3   r3   r4   Ú&create_schedule_with_tasks_service_bkpŠ  sp   úú	ú÷÷

û
þr£   c                 C   s¬  ddl m} dt ¡  d¡› }t| j|| j| j| j	g d}| 
||¡}| jp(g }g }g }|D ]‰}	|d | j|	j|	jr@|	j ¡ nd |	j|	jrK|	j ¡ nd |	jt|	jƒ|	jt ¡ dœ
}
|	jr…|d  d	t|	jƒi¡}|r…| d
¡| d¡| d¡| d¡t|d	 ƒdœ|
d< |t  |
¡}| t|jƒ¡ | |	j|	jr |	j ¡ nd |	j|	jr«|	j ¡ nd |	jt|	jƒ|	jdœ¡ q/|t  d	t|d ƒid||dœi¡ ||d< ||d< |S )NrE   r   r   rŽ   r   r&   )
r&   rF   r“   r”   Údrop_locationr•   rt   r–   r—   r   r   r   r   r   r   r   r   r   )r“   r”   r¤   r•   rt   r–   r—   r=   )r‘   rœ   r‘   rœ   ) r›   r   r   r(   rš   r   rF   rR   rS   rT   r5   rœ   r“   r”   r'   r¤   r•   rt   r‰   r–   r—   r   r*   r   r)   r+   ry   r-   r\   r.   r,   r?   )rŒ   r   rž   rQ   rŸ   r   r    r‘   rœ   r¡   r¢   r0   r2   r3   r3   r4   Ú"create_schedule_with_tasks_service2  sp   ú
ö

û	
ùþþ	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   rz   r,   rw   rv   ry   ÚMongoDBr'   r5   r+   r7   rA   rC   r‰   re   Úboolr…   r‡   r‹   r£   r¥   r3   r3   r3   r4   Ú<module>   s†    +	óÿþýüûúùø	÷
öõ
ô  Yýÿ
þ@ )