U
    Įwh.                     @   s   d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
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 d dlmZ G dd dejZdS )    N)copy)Path)urlparse)	safe_join)Linker)BeautifulSoup)*fields)CmfActiveEntity)cmf_chat_messagec                       s   e Zd Zejjdddg Zedd Zedd Zdd	 Z	d
d Z
dd Z fddZdd Zdd Z fddZ fddZdd Zd!ddZdddd fdd 
Z  ZS )"CmfChatMessageZlike	mark_readall_relation_personsc                    sT   fdd}t jjdd|d gdgd}tjj|d d	 d
 tjjd}| |jk rZd S |d  t j	 d}t jjdd|d gd|_
|j
j   d	 d |_ d	 d |_ d	 d rd|_|jdd }t j|}|sHt jj|d}|s`t j||j
jd}|  |||d |jj d |d d\}	|_|  d S n|j
|_|jr`|  |  }
||
_ d	 d s||
_t j	j|jddgd}|r| j|jdgd}|j|
_n$t jj|jd}|r||
_n||
_||
j|d |jj d |d d\}	|
_|  ||
_|
  t jj   t!"d|
jj d d i t j#|
d d S )!Nc              	      s   t |}|| }tj| |d}|  t| |}t|jj	ddd t
|d}	|	t| W 5 Q R X |dkrd|j d}
nd|j d d	  d
}
||
fS )N)parentnameT)parentsexist_okzwb+Zimagez
<img src="z">z	<a href="ZFileNamez<a>)	mimetypesZguess_extensionmodelsZCmfAttachmentsaver   Z
upload_dirr   r   mkdiropenwritebase64Z	b64decodeurl)r   	file_datar   	mime_type	file_typeZfile_extensionZreq_filenameattachZ	file_pathfZhtml_tagmessage (./modules/crm/models/cmf_chat_message.py	save_file   s    
z/CmfChatMessage.whatsapp_file.<locals>.save_fileid==Zcrm_idload_from_date)filterr
   r"   ZInfoZ	TimestampZtz)Zmessage_rawr)   ZIdZ	RemoteJidZFromMesent@r   )lead_phone_name)r.   r   fileZTypetype)r   r   r   r   r   z-cmf_modified_at)	client_idmessage_statusZorder_byr   )Zchannel_message_idr
   )Zcontactszcomment-current_person_id)$r   ZCmfWhatsappgetdatetimeZfromtimestamptimezoneutcdater(   CmfChannelMessagechannelr   load
message_idr1   r2   splitZ	CmfPersonZget_by_phoneZCmfLeadr   valuetextZdefault_channel
is_changedZcmf_created_at
cmf_authorr&   ZCmfDealZchannel_messageZ
CmfCommentZdpZcommitsocketioemit_whatsapp_message_received)clsdatar%   r:   Zmessage_dateZchannel_msgZphoneZcontactZleadr   chat_messageZ	last_sentlast_chat_messageZ	last_dealr#   r!   r$   whatsapp_file   sl      
  zCmfChatMessage.whatsapp_filec              
   C   sT   d|j jj d|jjj }td|j jjjj|jjj|jjj|j	j||d d S )Nzevent?dealPopup=z&selectObjectId=Zwhatsapp_message_received)r3   Z	author_idZauthor_nameZcomment_bodymsg_urlr0   )
r   coder>   rA   r&   rB   rC   Zresponsibler   r?   )rE   Zcommentr0   rJ   r#   r#   r$   rD   m   s    z)CmfChatMessage._whatsapp_message_receivedc                 K   s   |  dddg tjjdd| jgddtjjggd}| j dgd	 | jjrPg | _tjj	j
| jjkr| jj
tjjtjjd
 tjj	j
tjjj
d |r|  | jD ](}|js|jtjjkrqd|_|  q| jdd dS dS )Nzchannel_messages.channelzchannel_messages.cmf_author_idzchannel_messages.message_statusr<   r'   	person_idr+   viewsr	   r*   )r5   rK   r   readTZ	only_dataF)load_fieldsr   CmfChatTopicUnreadMessager4   r&   gZcurrent_personrM   is_nullrK   r>   Zjsonappendr5   Znowr6   r7   Z	isoformatr   deleteZchannel_messagesr:   Zcmf_author_idr2   r   )selfkwargsZunread_messagemsgr#   r#   r$   r   |   s,    

zCmfChatMessage.mark_readc                 C   s   | j r| j jjdkrd S | j jdddg | j| j j_| j j| j j_| j j	| j j_
| j | j j_| j jj  | j jjdd | | j _| j jjr| j   d S )NCmfChatTopiczgroup.cache_last_topic_codezgroup.cache_last_topic_namezgroup.last_topicTrO   )r   r>   
class_namerP   r?   groupZcache_last_comment_textrK   Zcache_last_topic_coder   Zcache_last_topic_nameZ
last_topicZcmf_modified_atZset_nowr   rH   r@   rV   r#   r#   r$   
_calc_chat   s    

zCmfChatMessage._calc_chatc           
      C   sr  ddd}| j jr| j jrdS tj}dddg|d< d	g|d
< dg|d< dddg|d< tj}|d |d |d |d |d |d |d |d |d |d
 tj| j jtj|d| _ t	|gd}|
| j j| _ t| j jd}|d}t|D ]P\}}|d}	|	d| |jd |	jd< d|	jd	< d|	jd< |||	 q| | _ dS ) u   
        Защита от инжектов которые могу прилететь из внешних систем
        :return:
        Fc                 S   s.   |  ds| S t| d }d| d< d| d< | S )N)Nhref_blank)NtargetZexternal)Nclass)r4   r   )attrsnewpr#   r#   r$   
set_target   s    
z.CmfChatMessage._clean_text.<locals>.set_targetNsrcwidthZheightimgra   spanr5   timeZcontrolsrK   Zaudiord   brZinsdelZfigureZ
figcaption)r?   tags
attributes)Z	callbackszhtml.parserar   r^   zchat-imgr_   r`   )F)r?   r@   rS   bleachZALLOWED_ATTRIBUTESZALLOWED_TAGSrT   Zcleanr>   r   Zlinkifyr   Zfind_all	enumerateZnew_taginsertrb   Zprettify)
rV   re   rn   rm   ZlinkerZsoupZimagesirh   linkr#   r#   r$   _clean_text   s@    
















zCmfChatMessage._clean_textc                    s6   |    |   |   |   |   t j||S N)r]   _calc_notify_calc_cacheru   r   superr   )rV   argsrW   	__class__r#   r$   r      s    zCmfChatMessage.savec                 K   s&   dS dS | jrd| _| | j j dS )u   
        Отправляем оповещения всем кроме автора комментария
        :param kwargs:
        :return:
        NT)r?   r@   r   priorityZ	importantZall_place_notifyr>   )rV   rW   r#   r#   r$   rw      s     zCmfChatMessage._calc_notifyc                 C   s(   | j r$| j j| _| j j| _| j j| _d S rv   )rA   ZloginZcache_cmf_author_loginrK   Zcache_cmf_author_coder   Zcache_cmf_author_namer\   r#   r#   r$   rx      s    

zCmfChatMessage._calc_cachec                    s.   |  dg | jr| j  tt|   d S )Ndeal)rP   r~   rC   ry   r   r\   r{   r#   r$   rC      s    
zCmfChatMessage.emitc                    s   t   dddg S )Nzparent.grouprA   r~   )ry   save_preload_fieldsr\   r{   r#   r$   r      s    z"CmfChatMessage.save_preload_fieldsc                 K   s\   | j rB| j}|j}tjj| j|d|j d|j d| jj| j d tj	|| | jd
  d S )Nu%   Важное сообщение в «u	   » — «   »)objpersonr   rX   r}   )r   r"   Z
chat_topic)r}   r   r[   r   Z	CmfNotifyZplace_notifyr   r?   r>   rQ   r   )rV   rL   rW   ZctZcgr#   r#   r$   _place_notify   s    zCmfChatMessage._place_notifyNc                 K   s   |  dg | jj S )Nr   )rP   r   Z	executorsZ
all_nested)rV   r
   rW   r#   r#   r$   r   
  s    z#CmfChatMessage.all_relation_personsFforceTEXKOM_db_deleteskip_owner_checkc                   sn   |rTt jj| ddD ]}d |_|jdd qt jj| ddD ]}d |_|jdd q<t j||||d|S )NT)rH   include_deletedrO   )rG   r   r   )	r   rY   listrH   r   r9   rG   ry   rU   )rV   r   r   r   rz   rW   Ztopicr:   r{   r#   r$   rU     s    zCmfChatMessage.delete)N)__name__
__module____qualname__r   r   Zapi_methodsclassmethodrI   rD   r   r]   ru   r   rw   rx   rC   r   r   r   rU   __classcell__r#   r#   r{   r$   r      s(   
R
/
r   )r   r5   r   r   pathlibr   urllib.parser   Zwerkzeug.utilsr   rp   r   Zbs4r   Zcmf.includeZcmfr
   Zcommon.models.cmf_active_entityr   Zmodules.crm.fieldsr   r   r#   r#   r#   r$   <module>   s   