
    SIg.                         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ej                  ZdS )    N)copy)Path)urlparse)	safe_join)Linker)BeautifulSoup)*fields)CmfActiveEntity)cmf_chat_messagec                        e Zd Zej        j        g dz   Zed             Zed             Zd Z	d Z
d Z fdZd Zd	 Z fd
Z fdZd ZddZdddd fd
Z xZS )CmfChatMessage)like	mark_readall_relation_personsc                    fd}t           j                            dd|d         gdg          }t          j                            |d         d         d	         t          j        j        
          }|                                |j        k     rd S |d         t           	                              }t           j                            dd|d         g          |_
        |j
        j                                         d         d         |_        d         d         |_        d         d         rd|_        |j                            d          d         }t           j                            |          }|st           j                            |          }|st                               ||j
        j                  }|                                  |||d         |j        j        d         |d                   \  }	|_        |                                 d S n'|j
        |_        |j        r|                                  |             }
||
_        d         d         s||
_        t           j	                            |j        ddg          }|r*|                     |j        dg          }|j        |
_        n6t           j                            |j                  }|r||
_        n||
_         ||
j        |d         |j        j        d         |d                   \  }	|
_        |                                 ||
_        |
                                 t           j        j                                          tB          "                    d|
j        j         dd i           t           j        #                    |
d           d S ) Nc                    t          j        |          }||z   }t                              | |          }|                                 t          |                                |          }t          |          j        	                    dd           t          |d          5 }	|	                    t          j        |                     d d d            n# 1 swxY w Y   |dk    rd|j         d}
nd|j         dd	          d
}
||
fS )N)parentnameT)parentsexist_okzwb+imagez
<img src="z">z	<a href="FileNamez<a>)	mimetypesguess_extensionmodelsCmfAttachmentsaver   
upload_dirr   r   mkdiropenwritebase64	b64decodeurl)r   	file_datar   	mime_type	file_typefile_extensionreq_filenameattach	file_pathfhtml_tagmessages              (./modules/crm/models/cmf_chat_message.py	save_filez/CmfChatMessage.whatsapp_file.<locals>.save_file   sG   &6yAAN.0L))l)KKFKKMMM!&"3"3"5"5|DDIOO"(((EEEi'' 51(334445 5 5 5 5 5 5 5 5 5 5 5 5 5 5G##6
666MvzMMWZ5HMMM8##s   &(CC!Cid==crm_idload_from_date)filterr   r0   Info	Timestamptz)message_rawr7   Id	RemoteJidFromMesent@r   )lead_phone_name)rC   r   fileTypetype)r   r'   r   r(   r)   z-cmf_modified_at)	client_idmessage_statusorder_byr   )channel_message_idr   )contactszcomment-current_person_id)$r   CmfWhatsappgetdatetimefromtimestamptimezoneutcdater6   CmfChannelMessagechannelr   load
message_idrG   rH   split	CmfPersonget_by_phoneCmfLeadr   valuetextdefault_channel
is_changedcmf_created_at
cmf_authorr3   CmfDealchannel_message
CmfCommentdpcommitsocketioemit_whatsapp_message_received)clsdatar2   rU   message_datechannel_msgphonecontactleadr,   chat_message	last_sentlast_chat_message	last_dealr0   s                 @r1   whatsapp_filezCmfChatMessage.whatsapp_file   s   	$ 	$ 	$ 	$ 	$ $((tT(^0LVfUg(hh(66tIv7N{7[`h`q`u6vv!777Fy/..7.CC$044T4h<X4YY"'')))!(!6 ' <6?8$ 	0)/K&%++C003 "//66 	 >%%e%<<D ~~eKDWD^~__		$-ITT&\XcXnXt8?SWX^S_%a %a %a!			 '2&9G#! suu&2#vx( 	.&-L#,00;;Pag;M:N 1 P P	 	. #9<QYPZ [ ["3":L
 **GJ*??I .&/## '.#$-I\5HTXY_T`.9.D.JV]^dVequv|q}% % %!!'2$##%%%9!4!799<OQU;VWWW44\6JJJJJ    c           
         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=whatsapp_message_received)rL   	author_idauthor_namecomment_bodymsg_urlrF   )
r   coder\   ra   r3   rg   rh   responsibler   r]   )rj   commentrF   r|   s       r1   ri   z)CmfChatMessage._whatsapp_message_receivedm   s    mW^%8%>mmPWPbPePkmm'%,^%9%E%H%N$/28&16< ' 2" 
	
 
	
 
	
 
	
 
	
rv   c                 B   |                      g d           t          j                            dd| j        gddt
          j        j        gg          }|                      dg           | j        j        rg | _        t
          j        j	        j
        | j        j        vr| j        j
                            t          j                            t          j        j                                                  t
          j        j	        j
        t
          j        j        j
        d	           |r|                                 | j        D ]?}|j        s|j        t
          j        j        k    r$d
|_        |                                 @|                     d           dS dS )N)zchannel_messages.channelzchannel_messages.cmf_author_idzchannel_messages.message_statusrW   r4   	person_idr=   viewsr
   r:   )rO   r}   r   readT	only_dataF)load_fieldsr   CmfChatTopicUnreadMessagerN   r3   gcurrent_personr   is_nullr}   r\   jsonappendrO   nowrQ   rR   	isoformatr   deletechannel_messagesrU   cmf_author_idrH   r   )selfkwargsunread_messagemsgs       r1   r   zCmfChatMessage.mark_read|   s   zzz{{{9==|UY[_[bFcGRTXZ[ZjZmFnFp= q q	***: 	DJ &djo==J##1B1F1F(J[J_1F1`1`1j1j1l1l-.-=-B-H-.-=-B-H%' %' ( ( (  (%%''',  ; #"3q7G7J"J"J%+"



III%%%4urv   c                 >   | j         r| j         j        j        dk    rd S | j         j                            g d           | j        | j         j        _        | j         j        | j         j        _        | j         j	        | j         j        _
        | j         | j         j        _        | j         j        j                                         | j         j                            d           | | j         _        | j         j        j        r| j                                          d S d S )NCmfChatTopic)zgroup.cache_last_topic_codezgroup.cache_last_topic_namezgroup.last_topicTr   )r   r\   
class_namer   r]   groupcache_last_comment_textr}   cache_last_topic_coder   cache_last_topic_name
last_topiccmf_modified_atset_nowr   rs   r_   r   s    r1   
_calc_chatzCmfChatMessage._calc_chat   s   { 	dk/:nLLF%% '= '= '= 	> 	> 	> 59I126+2B/26+2B/'+{$)11333...(,%;' 	K	 	rv   c                    dd}| j         j        r| j         j        rdS t          j        }g d|d<   dg|d<   dg|d	<   g d
|d<   t          j        }|                    d           |                    d           |                    d           |                    d           |                    d           |                    d	           |                    d           |                    d           |                    d           |                    d           t          j        | j         j        t          j        |          | _         t          |g          }|
                    | j         j                  | _         t          | j         j        d          }|                    d          }t          |          D ]o\  }}|                    d          }	|	                    d|           |j        d         |	j        d<   d|	j        d<   d|	j        d<   |                    ||	           p|                                | _         dS )u   
        Защита от инжектов которые могу прилететь из внешних систем
        :return:
        Fc                 r    |                      d          s| S t          | d                   }d| d<   d| d<   | S )N)Nhref_blank)Ntargetexternal)Nclass)rN   r   )attrsnewps      r1   
set_targetz.CmfChatMessage._clean_text.<locals>.set_target   sG    99^,, ~.//A&.E"#%/E/"Lrv   N)srcwidthheightimgr   spanrO   time)controlsr   r}   audior   brinsdelfigure
figcaption)r]   tags
attributes)	callbackszhtml.parserar   r   r   zchat-imgr   r   )F)r]   r_   r   bleachALLOWED_ATTRIBUTESALLOWED_TAGSr   cleanr\   r   linkifyr   find_all	enumeratenew_taginsertr   prettify)
r   r   r   r   linkersoupimagesir   links
             r1   _clean_textzCmfChatMessage._clean_text   s4   	 	 	 	 y# 	ty'8 	F.
666
5%Y
6(\
6999
7"ECDEEFGHL!!!FLdioF<O\fggg	:,///NN49?33	TY_m<<u%%'' 	! 	!FAs<<$$DKK3!$5!1DJv",DJw#+DJx KK4    MMOO			rv   c                     |                                   |                                  |                                  |                                  |                                   t                      j        |i |S N)r   _calc_notify_calc_cacher   r   superr   )r   argsr   	__class__s      r1   r   zCmfChatMessage.save   st    uww|T,V,,,rv   c                     dS )u   
        Отправляем оповещения всем кроме автора комментария
        :param kwargs:
        :return:
        N)r]   r_   r   priority	importantall_place_notifyr\   )r   r   s     r1   r   zCmfChatMessage._calc_notify   s	     	rv   c                 ~    | j         r5| j         j        | _        | j         j        | _        | j         j        | _        d S d S r   )ra   logincache_cmf_author_loginr}   cache_cmf_author_coder   cache_cmf_author_namer   s    r1   r   zCmfChatMessage._calc_cache   sC    ? 	>*./*?D')-)=D&)-)=D&&&	> 	>rv   c                     |                      dg           | j        r| j                                         t          t          |                                            d S )Ndeal)r   r   rh   r   r   r   r   s    r1   rh   zCmfChatMessage.emit   sW    &"""9 	INNnd##((*****rv   c                 N    t                                                      g dz   S )N)zparent.groupra   r   )r   save_preload_fieldsr   s    r1   r   z"CmfChatMessage.save_preload_fields   s%    ww**,,/U/U/UUUrv   c           	      *   | j         rW| j        }|j        }t          j                            | j        |d|j         d|j         d| j        j        | j                    t          	                    || | j                  
                                 d S )Nu%   Важное сообщение в «u	   » — «   »)objpersonr   r   r   )r   r0   
chat_topic)r   r   r   r   	CmfNotifyplace_notifyr   r]   r\   r   r   )r   r   r   ctcgs        r1   _place_notifyzCmfChatMessage._place_notify   s    = 		BB))K ZRWZZrwZZZIO *    	((	4TXT_(``eegggggrv   Nc                 j    |                      dg           | j        j                                        S )Nr   )r   r   	executors
all_nested)r   r   r   s      r1   r   z#CmfChatMessage.all_relation_persons
  s/    ($$${$//111rv   FforceTEXKOM_db_deleteskip_owner_checkc                F   |rt           j                            | d          D ]}d |_        |                    d            t           j                            | d          D ]}d |_        |                    d             t                      j        ||||d|S )NT)rs   include_deletedr   )rq   r   r   )	r   r   listrs   r   rT   rq   r   r   )	r   r   r   r   r   r   topicrU   r   s	           r1   r   zCmfChatMessage.delete  s     	-,11DZ^1__ + +(,'

T
****!388d\`8aa - -%)$t,,,,uww~t5CSfv  B  B  {A  B  B  	Brv   r   )__name__
__module____qualname__r   r   api_methodsclassmethodru   ri   r   r   r   r   r   r   rh   r   r   r   r   __classcell__)r   s   @r1   r   r      sx       "1= A
 A
 A
 
K PK PK [PKd 
 
 [
  0  "-$ -$ -$^- - - - -/ / /> > >+ + + + +V V V V Vh h h2 2 2 2 #(%RW 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Brv   r   )r$   rO   r   r   pathlibr   urllib.parser   werkzeug.utilsr   r   r   bs4r   cmf.includecmfr   common.models.cmf_active_entityr   modules.crm.fieldsr   r    rv   r1   <module>r     s&                     ! ! ! ! ! ! $ $ $ $ $ $                        ; ; ; ; ; ; / / / / / /DB DB DB DB DB%4 DB DB DB DB DBrv   