B
    Yf                 @   st   d dl Z d dlZd dlmZmZmZ d dlmZ d dlmZ d dl	T d dl
mZ d dlmZmZ G dd	 d	eZdS )
    N)datetimetimezonedate)Path)BeautifulSoup)*)CmfMessageMixin)before_requestcmf_contextc                   s   e Zd Zi Zeeje	j
dgZeed< ejf eZejdg Zdd fdd
Z fdd	Zd
d Zdd Zed fdd	Zdd ZdeedddZdddZdd Zdd Z  ZS )CmfWhatsappzmodules/voip/templatesloadersend_messager   )depthc               s   t  j|d|i|S )Nr   )supersave)selfr   argskwargs)	__class__ $./modules/crm/models/cmf_whatsapp.pyr      s    zCmfWhatsapp.savec                s    t t| j||}| d d S )NZwhatsapp_delete)r   r   deletesend_cmd)r   r   r   Zres)r   r   r   r      s    zCmfWhatsapp.deletec             C   s   |  d dS )um   
        Отправляем событие на отключение сессии
        :return:
        Zwhatsapp_disconnectN)r   )r   r   r   r   
disconnect   s    zCmfWhatsapp.disconnectc             C   s$   |  dg | dd| jji d S )Nload_from_dateZwhatsapp_connect)Zload_fieldsr   r   Zjson)r   r   r   r   connect$   s    zCmfWhatsapp.connectNc                s>   |dkr$|sg }|dddgg}dg}t  j|f||d|S )Nparentzstatus.status_typez!=ZCLOSEDZCmfPipeline)filtermodels_list)r   field_options_list)clsZrelation_field_namer   r   r   )r   r   r   r   (   s    zCmfWhatsapp.field_options_listc             C   s   |  d d S )NZwhatsapp_status)r   )r   r   r   r   check_status1   s    zCmfWhatsapp.check_status)cmddatac             C   s:   |d krt  }tj|d< | jj|d< t||dtd d d S )NZorg_nameZcrm_idz	/whatsapp)	namespaceZsocket_clientZroom)dictconfigZORG_NAMEidvalueZcmf_emit_eventZwhatsapp_sio)r   r"   r#   r   r   r   r   4   s
    
zCmfWhatsapp.send_cmdc          
   O   s  |sd S | d}d }t j|}t }	t|}
g }x6|
dD ](}d|jddkr@|t|dd q@W x$|
dD ]}|t|d	d qxW |rbx|D ]}|d
 }|jd}t	
d|d }t jjdd|gdgd}t j|dd | |dd}t|jd}| }W d Q R X t| }||	d< tjd|dd  |	d< |d |	d< qW n|
 }t j|| |dd}|r||_d|_||_|  |jj|	d< |jj|	d< |jj|	d< |jj|	d< |  d |	 |S )!Nz@s.whatsapp.netazcmf-fileclass file)objtypeimgimager-   srcz	/files/.*r   urlz==r   )r   Zfields/Zsending)textchannel	client_idmessage_statusrb.   	mime_typer.   outphonemessageZcrm_message_id
message_idZwhatsapp_message_send)!models	CmfPersonZget_by_phoner%   r   ZfindAllZattrsgetappendrefindallZCmfAttachmentCmfChannelMessagesplitopen	file_pathreadbase64Z	b64encodedecode	mimetypesZ	types_mapZget_textchat_messagemessage_flow	person_tor   r7   r(   r5   r'   r@   r   )r   Zphone_numberr?   rO   r   r   r7   channel_msgcontactparamsZsoupfilesr-   Z_fileZfull_urlZurl_pathZ
attachmentfr/   Z	plain_msgr   r   r   r   <   sR    

 zCmfWhatsapp.send_messagec             O   s  | j | jdd tjj |d | jd}|r.d S t|d }| | jk rNd S tj|d}| |_|d |_	|d |_
|j
dd	 }tjj|d
ddgd}|d rd|_d|_||_nd|_||_d}d}	|d r|d d|j d|jj }
| |d |
|d }d| }	|d dkr.|d |_n|d dkrd| jd}t|	dd}|jf ||_nL|d dkrd|	 d |_n.|d d!krd"|	 d |d  d#|_nd$|_|  |S )%NT)Z
for_updateZId)r@   Z
channel_idZ	Timestamp)message_rawZ	RemoteJid@r   Z
user_localz==F)r   ZFromMer=   Zsentinr+   r,   z%Y%m%d_%H%M%S_r<   z/filesr.   r5   ZTextZaudiozrecord.html)r2   r5   r0   z
<img src="z">Zdocumentz	<a href="z</a>u4   Не поддерживаемое сообщение)rC   r'   rA   rG   r   Zfromisoformatr   r   r6   r@   r7   rH   rB   Zget_or_create_by_phonerP   r8   rQ   Zperson_fromstrftimecodeZ
cmf_author
_save_filer5   
_jinja_envZget_templater%   Zrenderr   )r   rW   r   r   rR   Zmessage_dater>   rS   rJ   r2   nametemplatecontextr   r   r   receive_messagej   sL    


 
zCmfWhatsapp.receive_messagec       	      C   s   t |dd }|dkr d}|| }tj d| j dt d d| }t	
d|  tjjj }||}|jd	d
d
d |jt|d	d |S )N;r   z
image/webpz.webpz/files/obj/r3   z%Y%mu/   Сохраняем файл сообщения FT)is_direxist_okparents)Zbackup)rN   Zguess_extensionrH   r&   PROJECT_DIR
class_namer   Ztodayr[   gdebugrA   ZCmfRFileZdpZdata_driverZget_rdZ	get_rfileZcreatewriterL   Z	b64decode)	r   Z	file_datar_   r<   Zfile_extensionZreq_filenamerJ   ZrdiskZrfiler   r   r   r]      s    (
zCmfWhatsapp._save_file)NN)N)N)__name__
__module____qualname__Z_optionsZjinja2ZFileSystemLoaderospathjoinr&   rg   Z_loaderZEnvironmentr^   r   Zapi_methodsr   r   r   r   classmethodr   r!   strr%   r   r   rb   r]   __classcell__r   r   )r   r   r      s"   
.2r   )rL   rN   r   r   r   Zpathlibr   Zbs4r   Zcmf.includeZ$modules.crm.models.cmf_message_mixinr   Zcmf.appr	   r
   r   r   r   r   r   <module>   s   