3
Hl_z                 @   s   d dl mZ d dlmZ d dlZddlmZ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 d d
lmZ G dd deZG dd deZG dd deZG dd deZG dd deZG dd deZdS )    )AsyncWebsocketConsumer)AsyncConsumerN   )ChatNotifications)DriverModelDriverCoordinates	DriverJob)async_to_sync)sendfcmnotification)StopConsumer)database_sync_to_asyncc               @   s2   e Zd ZdgZdd Zdd Zdd Zdd	 Zd
S )$DriverCoordinatesCustomerEndConsumer	broadcastc                s   t d t d t d | jd d d }| jd d d }|dkr\t|d	 t| | _n
t|| _t d
| j | jj| j| jI d H  | jddiI d H  d S )N
   z1in DriverCoordinatesCustomerEndConsumer - connect	url_routekwargsuserroleuseriddriver_zgroup_name = typezwebsocket.acceptz



z



)printscopestr
group_namechannel_layer	group_addchannel_namesend)selfeventr   r    r#   1/var/www/html/GoodsDelivery/AdminApp/consumers.pywebsocket_connect   s    
z6DriverCoordinatesCustomerEndConsumer.websocket_connectc                sn   t d t d t | t d y| jd|d dI d H  W n* tk
rh } zt | W Y d d }~X nX d S )	Nr   
   z coordinates - new_message 


zwebsocket.sendtext)r   r'   z










z










)r   r    	Exception)r!   r"   er#   r#   r$   new_message2   s    z0DriverCoordinatesCustomerEndConsumer.new_messagec                s  t d t d t d t |d  yn|d dkr| jd d d }tjj|d	j }|rtjjtd
j }|r||jr|d}t	jj|dj }|ri }|j
|j|j|jd t | | jj| jdtj|dI d H  ntj|d }t | yt | |d }	|d }
| jd d d }d|kr| jd d d }tjj|d	j }|rt	jj|dj }|r|	|_|
|_|j  t d n t	jj|jj||	|
d t d n W n tk
r } zt d | jd d d }tjj|d	j }|r|d }d}tjj|dj }|r"|jr"d}t	jj|dj }|ri }|j
|j|j|jd t | | jj| jdtj|dI d H  W Y d d }~X nX W n, tk
r } zt | W Y d d }~X nX d S )Nr   r   z&in DriverCoordinatesConsumer - receiver'   zget coordinatesr   r   r   )id)customerjobT)r   )driveridlatitude	longituder*   )r   r'   r.   r/   r   r   zcoordinates updated)user_idr   r.   r/   zcoordinates obj createdzdriver get coordinatescustomerjobidF)customerjob_idz



z



)r   r   r   objectsfilterfirstr	   customerjob_obj
jobstartedr   updater+   r.   r/   r   
group_sendr   jsondumpsloadssavecreateuserr(   )r!   r"   r-   
driver_objdriverjob_objparcelpickeddrivercoordinates_objdrivercoordinates_datablatitude_vallongitude_valr   r)   customerjobid_valr#   r#   r$   websocket_receiveC   s    


,z6DriverCoordinatesCustomerEndConsumer.websocket_receivec                sh   t d t d t d | jjd| jI d H  y
t W n* tk
rb } zt | W Y d d }~X nX d S )Nr   r   z)in DriverCoordinatesConsumer - disconnectadmin_1z



z



)r   r   group_discardr   r   r(   )r!   
close_coder)   r#   r#   r$   websocket_disconnect   s    
z9DriverCoordinatesCustomerEndConsumer.websocket_disconnectN)__name__
__module____qualname__groupsr%   r*   rI   rM   r#   r#   r#   r$   r      s
   hr   c               @   s2   e Zd ZdgZdd Zdd Zdd Zdd	 Zd
S )DriverCoordinatesConsumerr   c                s   t d t d t d | jd d d }| jd d d }|dkr\t|d	 t| | _n
t|| _t d
| j | jj| j| jI d H  | jddiI d H  d S )Nr   r   z&in DriverCoordinatesConsumer - connectr   r   r   r   r   r   zgroup_name = r   zwebsocket.acceptz



z



)r   r   r   r   r   r   r   r    )r!   r"   r   r   r#   r#   r$   r%      s    
z+DriverCoordinatesConsumer.websocket_connectc                sn   t d t d t | t d y| jd|d dI d H  W n* tk
rh } zt | W Y d d }~X nX d S )	Nr   r&   z coordinates - new_message 


zwebsocket.sendr'   )r   r'   z










z










)r   r    r(   )r!   r"   r)   r#   r#   r$   r*      s    z%DriverCoordinatesConsumer.new_messagec                s  t d t d t d t |d  yp|d dkr| jd d d }tjj|d	j }|rtjjtd
j }|r||jr|d}t	jj|dj }|ri }|j
|j|j|jd t | | jj| jdtj|dI d H  ntj|d }t | yt | |d }	|d }
| jd d d }d|kr| jd d d }tjj|d	j }|rt	jj|dj }|r|	|_|
|_|j  t d n t	jj|jj||	|
d t d n W n tk
r } zt d | jd d d }tjj|d	j }|r|d }d}tjj|dj }|r"|jr"d}t	jj|dj }|ri }|j
|j|j|j|d t | | jj| jdtj|dI d H  W Y d d }~X nX W n, tk
r } zt | W Y d d }~X nX d S )Nr   r   z&in DriverCoordinatesConsumer - receiver'   zget coordinatesr   r   r   )r+   )r,   T)r   )r-   r.   r/   r*   )r   r'   r.   r/   r   r   zcoordinates updated)r0   r   r.   r/   zcoordinates obj createdzdriver get coordinatesr1   F)r2   )r-   r.   r/   rB   z



z



)r   r   r   r3   r4   r5   r	   r6   r7   r   r8   r+   r.   r/   r   r9   r   r:   r;   r<   r=   r>   r?   r(   )r!   r"   r-   r@   rA   rB   rC   rD   rE   rF   rG   r   r)   rH   r#   r#   r$   rI      s    



,z+DriverCoordinatesConsumer.websocket_receivec                s   t d t d t d	 | jd d d }| jjdt| | jI d H  y
t W n* tk
r| } zt | W Y d d }~X nX d S )
Nr   r   z)in DriverCoordinatesConsumer - disconnectr   r   r   driver_z



z



)r   r   r   rK   r   r   r   r(   )r!   rL   r   r)   r#   r#   r$   rM   O  s    

z.DriverCoordinatesConsumer.websocket_disconnectN)rN   rO   rP   rQ   r%   r*   rI   rM   r#   r#   r#   r$   rR      s
   irR   c               @   s2   e Zd ZdgZdd Zdd Zdd Zdd	 Zd
S )ChatConsumerr   c                s   t d t d t d | jd d d }| jd d d }t|d t| | _t d	| j | jj| j| jI d H  | jd
diI d H  d S )Nr   r   zin ChatConsumer - connectr   r   r   r   r   zgroup_name = r   zwebsocket.acceptz



z



)r   r   r   r   r   r   r   r    )r!   r"   r   r   r#   r#   r$   r%   f  s    zChatConsumer.websocket_connectc                s&  t d t d t | t d y| jd|d dI d H  tj|d }t |d  |d dkrt d	 tjj|d
 dj }t d |rt d y*t d t|j	ddd|d  t d W n2 t
k
r } zt | t d W Y d d }~X nX W n, t
k
r  } zt | W Y d d }~X nX d S )Nr   r&   z notification newww 


zwebsocket.sendr'   )r   r'   senderadmin0r-   )r+   123r   
newmessagezAdmin Messagemessage45z










z










)r   r    r:   r<   r   r3   r4   r5   r   fcmtokenr(   )r!   r"   str@   r)   r#   r#   r$   r*   y  s4    zChatConsumer.new_messagec                s(  t d1 t d t | t d2 t |d  t d3 t d4 |d dkryW n& tk
rt } z
d}W Y d d }~X nX tjj|d	j }|r$g }|jrttj	|jj
 }nd
}|j|jj|jj
|jj|jj
|j|j||jjdd t | | jdtj|dI d H  n|d dkr"ntj|d }y|d }|d }	|d }
|d }|d }t | t |	 t |
 t | t | |
dkr|d }|dkr|d }|rt d nt d d}|	r|r|r|
dkrtjj|	|||d}|rt d |dkr|d
jdd tdD }t | t }|j|j
|}|j|}d| }t | tjj|	|||d }|r|t d! y`d5\}}|d#krd$}|jj
}|jjj}nd$}d%}|jjj}tjj|||d&d'| d( d)d* W n, tk
r } zt | W Y d d }~X nX i }tjj|	|d+j }|r|jrDttj	|jj
 }nd
}|j|jj|jj
|jj|jj
|j|j||jjdd t | d#| j krd,}nd6t|d.  }| j!j"| j d/tj|dI d H  | j!j"|d/tj|dI d H  t d0 W n, tk
r" } zt | W Y d d }~X nX d S )7Nr   r   zin ChatConsumer - receiver'   rW      zupdate client   )	driver_id z%d/%m/%Y %I:%M:%S %p)adminid	adminnamer-   
drivernamer\   rU   
attachmenttimezwebsocket.send)r   r'   testrU   rc   messageexistr\   attachmentexistyesfilezattachment existszno attachmentr   )rc   admin_idr\   rU   zmessage saved in databasec             S   s   g | ]}t jtjtj qS r#   )randomchoicestringascii_lettersdigits).0nr#   r#   r$   
<listcomp>  s    z2ChatConsumer.websocket_receive.<locals>.<listcomp>   z/media/)rc   ro   filesrU   zattachment saved in databaseFr   TAdminzNew MessagezNew message from .unread)r0   foradmin	fordrivernotificationtypenotificationtextstatus)rc   ro   rJ   r   r-   r*   successz



z



z



Z0000000000000000000)FFrS   )#r   r(   r   r3   r4   lastry   r   settingsWEB_BASE_URLnameappendrV   r+   r   r\   rU   
created_atstrftimer    r:   r;   r<   r>   joinrangeFileSystemStorager=   urlr?   r   r8   r   r   r9   )r!   r"   r)   r-   chat_objlatest_message_datarh   rE   rU   rc   rk   r\   rl   ro   r`   fsfilenamer}   r~   
sendernamer0   Zothergroup_namer#   r#   r$   rI     s    







$zChatConsumer.websocket_receivec                sh   t d t d t d | jjd| jI d H  y
t W n* tk
rb } zt | W Y d d }~X nX d S )Nr   r   zin ChatConsumer - disconnectrJ   z



z



)r   r   rK   r   r   r(   )r!   rL   r)   r#   r#   r$   
disconnect@  s    
zChatConsumer.disconnectN)rN   rO   rP   rQ   r%   r*   rI   r   r#   r#   r#   r$   rT   c  s    )rT   c               @   s2   e Zd ZdgZdd Zdd Zdd Zdd	 Zd
S )AdminChatConsumerr   c                s0   t d t d t d | jddiI d H  d S )Nr   r   zin AdminChatConsumer - connectr   zwebsocket.acceptz



z



)r   r    )r!   r"   r#   r#   r$   r%   k  s
    z#AdminChatConsumer.websocket_connectc                sn   t d t d t | t d y| jd|d dI d H  W n* tk
rh } zt | W Y d d }~X nX d S )	Nr   r&   z admin - sockets 


zwebsocket.sendr'   )r   r'   z










z










)r   r    r(   )r!   r"   r)   r#   r#   r$   r*     s    zAdminChatConsumer.new_messagec                s  t d% t d t | t d& t |d  t d' |d dkr| jd d d }tjj|d	j }|rg }|jrttj	|jj
 }nd
}|j|jj|jj
|jj|jj
|j|j||jjdd t | | jdtj|dI d H  n|d dk rntj|d }t | y:t | |d }|dkrT| jj| jd|d dI d H  n|d }|d }	|d }
|d }t | t | t |	 t |
 t | |	dkr|d }
|dkr|d }|rt d nt d d}|rD|rD|rD|	dkrtjj|||
|d}|rt d |dkrd
jdd td D }t | t }|j|j
|}|j|}d!| }t | tjj||||d"}|rt d# i }| jd d d }tjj|d	j }|rD|jrttj	|jj
 }nd
}|j |jj|jj
|jj|jj
|j|j||jjdd t | | jj| jdtj|dI d H  t d$ W n, t!k
rz } zt | W Y d d }~X nX d S )(Nr   r   zin AdminChatConsumer - receiver'   zupdate clientr   r   r-   )rc   rd   z%d/%m/%Y %I:%M:%S %p)re   rf   r-   rg   r\   rU   rh   ri   zwebsocket.send)r   r'   rj   rU   r   r*   rc   rk   r\   rl   rm   rn   zattachment existszno attachmentr   )rc   ro   r\   rU   zmessage saved in databasec             S   s   g | ]}t jtjtj qS r#   )rp   rq   rr   rs   rt   )ru   rv   r#   r#   r$   rw     s    z7AdminChatConsumer.websocket_receive.<locals>.<listcomp>rx   z/media/)rc   ro   ry   rU   zattachment saved in databaser   z



z



z



)"r   r   r   r3   r4   r   ry   r   r   r   r   r   rV   r+   r   r\   rU   r   r   r    r:   r;   r<   r   r9   r   r>   r   r   r   r=   r   r8   r(   )r!   r"   r-   r   r   rh   rE   rU   rc   rk   r\   rl   ro   r`   r   r   r)   r#   r#   r$   rI     s    






z#AdminChatConsumer.websocket_receivec                s   t d t d t d d S )Nr   r   z!in AdminChatConsumer - disconnectz



z



)r   )r!   rL   r#   r#   r$   rM     s    z&AdminChatConsumer.websocket_disconnectN)rN   rO   rP   rQ   r%   r*   rI   rM   r#   r#   r#   r$   r   h  s
   }r   c               @   s*   e Zd ZdgZdd Zdd Zdd ZdS )	DriverUpdateCoordinatesr   c                s0   t d t d t d | jddiI d H  d S )Nr   r   zin AdminChatConsumer - connectr   zwebsocket.acceptz



z



)r   r    )r!   r"   r#   r#   r$   r%     s
    z)DriverUpdateCoordinates.websocket_connectc                s   t d t d t d t |d  d}d}g }tjj||djd}|rx4|D ],}|j|jj|jj|j	j|j	j|j
d qPW | jd	tj|d
I d H  d S )Nr   r   zin AdminChatConsumer - receiver'   r   )ro   rc   r   )re   rf   r-   rg   r\   zwebsocket.send)r   r'   z



z



)r   r   r3   r4   order_byr   rV   r+   r   r   r\   r    r:   r;   )r!   r"   re   r-   Z	chat_datar   Zchatr#   r#   r$   rI   )  s&    
z)DriverUpdateCoordinates.websocket_receivec                s   t d t d t d d S )Nr   r   z!in AdminChatConsumer - disconnectz



z



)r   )r!   rL   r#   r#   r$   rM   D  s    z,DriverUpdateCoordinates.websocket_disconnectN)rN   rO   rP   rQ   r%   rI   rM   r#   r#   r#   r$   r     s   r   c               @   s2   e Zd ZdgZdd Zdd Zdd Zdd	 Zd
S )DriverGetChatsr   c                sp   t d
 t d t d | jd d d }t|| _t d| j | jj| j| jI d H  | jdd	iI d H  d S )Nr   r   zin DriverGetChats - connectr   r   r-   zgroup_name = r   zwebsocket.acceptz



z



)r   r   r   r   r   r   r   r    )r!   r"   r-   r#   r#   r$   r%   N  s    
z DriverGetChats.websocket_connectc                s&  t d t d t | t d y| jd|d dI d H  tj|d }t |d  |d dkrt d	 tjj|d
 dj }t d |rt d y*t d t|j	ddd|d  t d W n2 t
k
r } zt | t d W Y d d }~X nX W n, t
k
r  } zt | W Y d d }~X nX d S )Nr   r&   z, notification newwwwwwwwwwwwwwwwwwwwwwww 


zwebsocket.sendr'   )r   r'   rU   rV   rW   r-   )r+   rX   rY   rZ   r   r[   zAdmin Messager\   r]   r^   z










z










)r   r    r:   r<   r   r3   r4   r5   r   r_   r(   )r!   r"   r`   r@   r)   r#   r#   r$   r*   c  s4    zDriverGetChats.new_messagec                sR  t d$ t d t | t d% t |d  t d& |d dkr| jd d d }tjj|d	j }|rg }|jrttj	|jj
 }nd
}|j|jj|jj
|jj|jj
|j|j||jjdd t | | jdtj|dI d H  nd|d dk rnRtj|d }t | yt | |d }|d }|d }	|d }
|d }t | t | t |	 t |
 t | |	dkr|d }
|dkr|d }|rt d nt d d}|r|r|r|	dkrtjj|||
|d}|rt d |dkrfd
jdd tdD }t | t }|j|j
|}|j|}d| }t | tjj||||d }|rft d! i }| jd d d }tjj|d	j }|r|jrttj	|jj
 }nd
}|j|jj|jj
|jj|jj
|j|j||jjdd t | | jj| j d"tj|dI d H  t d# W n, t!k
rL } zt | W Y d d }~X nX d S )'Nr   r   zin DriverGetChats - receiver'   zupdate clientr   r   r-   )rc   rd   z%d/%m/%Y %I:%M:%S %p)re   rf   r-   rg   r\   rU   rh   ri   zwebsocket.send)r   r'   rj   rU   rc   rk   r\   rl   rm   rn   zattachment existszno attachmentr   )rc   ro   r\   rU   zmessage saved in databasec             S   s   g | ]}t jtjtj qS r#   )rp   rq   rr   rs   rt   )ru   rv   r#   r#   r$   rw     s    z4DriverGetChats.websocket_receive.<locals>.<listcomp>rx   z/media/)rc   ro   ry   rU   zattachment saved in databaser*   r   z



z



z



)"r   r   r   r3   r4   r   ry   r   r   r   r   r   rV   r+   r   r\   rU   r   r   r    r:   r;   r<   r>   r   r   r   r=   r   r8   r   r9   r   r(   )r!   r"   r-   r   r   rh   rE   rU   rc   rk   r\   rl   ro   r`   r   r   r)   r#   r#   r$   rI     s    





(z DriverGetChats.websocket_receivec                s   t d t d t d d S )Nr   r   zin DriverGetChats - disconnectz



z



)r   )r!   rL   r#   r#   r$   rM   .  s    z#DriverGetChats.websocket_disconnectN)rN   rO   rP   rQ   r%   r*   rI   rM   r#   r#   r#   r$   r   K  s    -r   )Zchannels.generic.websocketr   Zchannels.consumerr   r:   modelsr   r   Driver.modelsr   r   r	   asgiref.syncr
   ZCustomer.commonfunctionsr   channels.exceptionsr   channels.dbr   r   rR   rT   r   r   r   r#   r#   r#   r$   <module>   s&    $ )   13