U
    Įwh                     @   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   resr   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jsonr   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_statusr   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 }|
dD ](}d|jddkr>|t|dd q>|
dD ]}|t|d	d qr|rV|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 5 Q R X t| }||	d< tjd|dd  |	d< |d |	d< qn|
 }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imager1   srcz	/files/.*r   url==r   )r!   Zfields/Zsending)textchannel	client_idmessage_statusrb.   	mime_typer2   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   r<   r,   r:   r+   rE   r   )r   Zphone_numberrD   rT   r   r   r<   channel_msgcontactparamsZsoupfilesr1   Z_fileZfull_urlZurl_pathZ
attachmentfr3   Z	plain_msgr   r   r   r   <   s^    
     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)rE   Z
channel_idZ	Timestamp)message_rawZ	RemoteJid@r   Z
user_localr7   F)r!   ZFromMerB   sentinr/   r0   z%Y%m%d_%H%M%S_rA   z/filesr2   r:   ZTextZaudiozrecord.html)r6   r:   r4   z
<img src="z">Zdocumentz	<a href="z</a>u4   Не поддерживаемое сообщение)rH   r+   rF   rL   r   Zfromisoformatr   r   r;   rE   r<   rM   rG   Zget_or_create_by_phonerU   r=   rV   Zperson_fromstrftimecodeZ
cmf_author
_save_filer:   
_jinja_envZget_templater)   Zrenderr   )r   r\   r   r   rW   Zmessage_daterC   rX   rO   r6   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/r8   z%Y%mu/   Сохраняем файл сообщения FT)is_direxist_okparents)Zbackup)rS   Zguess_extensionrM   r*   PROJECT_DIR
class_namer   Ztodayra   gdebugrF   ZCmfRFileZdpZdata_driverZget_rdZ	get_rfileZcreatewriterQ   Z	b64decode)	r   Z	file_datare   rA   Zfile_extensionZreq_filenamerO   rdiskZrfiler   r   r   rc      s    (
zCmfWhatsapp._save_file)NN)N)N)__name__
__module____qualname__Z_optionsZjinja2ZFileSystemLoaderospathjoinr*   rm   Z_loaderZEnvironmentrd   r   Zapi_methodsr   r   r   r   classmethodr#   r%   strr)   r   r   rh   rc   __classcell__r   r   r   r   r      s$   
.2r   )rQ   rS   r   r   r   pathlibr   Zbs4r   Zcmf.includeZ$modules.crm.models.cmf_message_mixinr   Zcmf.appr	   r
   r   r   r   r   r   <module>   s   