U
    ܌f.                     @   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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)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j| |}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saveZflaskZhelpersZ	safe_joinZ
upload_dirr   r   mkdiropenwritebase64Z	b64decodeZ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_idr/   r0   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#   r8   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)r1   Z	author_idZauthor_nameZcomment_bodymsg_urlr.   )
r   coder<   r?   r$   r@   rA   Zresponsibler   r=   )rC   Zcommentr.   rH   r!   r!   r"   rB   l   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(   )r3   rI   r   readTZ	only_dataF)load_fieldsr   CmfChatTopicUnreadMessager2   r$   gZcurrent_personrK   is_nullrI   r<   Zjsonappendr3   Znowr4   r5   Z	isoformatr   deleteZchannel_messagesr8   Zcmf_author_idr0   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_topicTrM   )r   r<   
class_namerN   r=   groupZcache_last_comment_textrI   Zcache_last_topic_coder   Zcache_last_topic_nameZ
last_topicZcmf_modified_atZset_nowr   rF   r>   rT   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)r2   r   )attrsnewpr!   r!   r"   
set_target   s    
z.CmfChatMessage._clean_text.<locals>.set_targetNsrcwidthZheightimgr_   spanr3   timeZcontrolsrI   Zaudiorb   brZinsdelZfigureZ
figcaption)r=   tags
attributes)Z	callbackszhtml.parserar   r\   zchat-imgr]   r^   )F)r=   r>   rQ   bleachZALLOWED_ATTRIBUTESZALLOWED_TAGSrR   Zcleanr<   r   Zlinkifyr   Zfind_all	enumerateZnew_taginsertr`   Zprettify)
rT   rc   rl   rk   ZlinkerZsoupZimagesirf   linkr!   r!   r"   _clean_text   s@    
















zCmfChatMessage._clean_textc                    s6   |    |   |   |   |   t j||S N)r[   _calc_notify_calc_cachers   r   superr   )rT   argsrU   	__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<   )rT   rU   r!   r!   r"   ru      s     zCmfChatMessage._calc_notifyc                 C   s(   | j r$| j j| _| j j| _| j j| _d S rt   )r?   ZloginZcache_cmf_author_loginrI   Zcache_cmf_author_coder   Zcache_cmf_author_namerZ   r!   r!   r"   rv      s    

zCmfChatMessage._calc_cachec                    s.   |  dg | jr| j  tt|   d S )Ndeal)rN   r|   rA   rw   r   rZ   ry   r!   r"   rA      s    
zCmfChatMessage.emitc                    s   t   dddg S )Nzparent.groupr?   r|   )rw   save_preload_fieldsrZ   ry   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   rV   r{   )r   r    Z
chat_topic)r{   r   rY   r   Z	CmfNotifyZplace_notifyr   r=   r<   rO   r   )rT   rJ   rU   ZctZcgr!   r!   r"   _place_notify   s    zCmfChatMessage._place_notifyNc                 K   s   |  dg | jj S )Nr   )rN   r   Z	executorsZ
all_nested)rT   r	   rU   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)rF   include_deletedrM   )rE   r   r   )	r   rW   listrF   r   r7   rE   rw   rS   )rT   r   r   r   rx   rU   Ztopicr8   ry   r!   r"   rS     s    zCmfChatMessage.delete)N)__name__
__module____qualname__r   r   Zapi_methodsclassmethodrG   rB   r   r[   rs   r   ru   rv   rA   r}   r   r   rS   __classcell__r!   r!   ry   r"   r      s(   
R
/
r   )r   r3   r   r   pathlibr   Zurllib.parser   rn   r   Zbs4r   Zcmf.includeZcmfr	   Zcommon.models.cmf_active_entityr
   Zmodules.crm.fieldsr   r   r!   r!   r!   r"   <module>   s   