
    <g.                         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 d d	lmZ d d
lmZ d dlmZ  G d dej*                        Zy)    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                  j                  dd|d   gdg      }t        j                  j	                  |d   d   d	   t        j
                  j                  
      }|j                         |j                  k  ry |d   t         j                        }t         j                  j                  dd|d   g      |_
        |j                  j                  j                          d   d   |_        d   d   |_        d   d   rd|_        |j                  j!                  d      d   }t         j"                  j%                  |      }|st         j&                  j                  |      }|st         j'                  ||j                  j                        }|j)                           |||d   |j                  j*                  d   |d         \  }	|_        |j)                          y |j                  |_        |j0                  r|j)                           |        }
||
_        d   d   s||
_        t         j                  j                  |j                  ddg      }|r0| j                  |j6                  dg      }|j                  |
_        n;t         j8                  j                  |j6                        }|r||
_        n||
_         ||
j                  |d   |j                  j*                  d   |d         \  }	|
_        |j)                          ||
_        |
j)                          t         j<                  j>                  jA                          tB        jE                  d|
j                  j6                   dd i       t         j<                  jG                  |
d       y ) Nc                    t        j                  |      }||z   }t        j                  | |      }|j	                          t        |j                         |      }t        |      j                  j                  dd       t        |d      5 }	|	j                  t        j                  |             d d d        |dk(  rd|j                   d}
||
fS d|j                   dd	    d
}
||
fS # 1 sw Y   <xY w)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   s    &66yAN.0L))l)KFKKM!&"3"3"5|DIO""(((Ei' 51((345G#'

|26 8## 'vzzl"WZ5H4IM8##5 5s   %C//C8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((66tIv7N{7[`h`q`q`u`u6v!7!77y/..7.C$0044T4h<X4Y""'')!(!6 ' <6?8$)/K&%%++C03 ""//6 >>%%e%<D~~eKDWDWD^D^~_		$-TT&\XcXnXnXtXt8?SWX^S_%a!			&1&9&9G#!!u&2#vx(&-L#,,00;;P;Pag;M:N 1 P	 #9<<QYPZ ["3":":L
 **GJJ*?I&/# '.#$-\5H5HTXY_T`.9.D.D.J.JV]^dVequv|q}%!!'2$##%!4!4!7!7 89<OQU;VW44\6J    c           
         d|j                   j                  j                   d|j                  j                  j                   }t
        j                  d|j                   j                  j                  j                  j                  |j                  j                  j                  |j                  j                  j                  |j                  j                  ||d       y )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    $W^^%8%8%>%>$??OPWPbPbPePePkPkOlm'%,^^%9%9%E%E%H%H%N%N$//2288&1166<< ' 2 2"
	
rv   c                    | j                  g d       t        j                  j                  dd| j                  gddt
        j                  j                  gg      }| j                  dg       | j                  j                  rg | _        t
        j                  j                  j                  | j                  j                  vr2| j                  j                  j                  t        j                  j                  t        j                  j                         j#                         t
        j                  j                  j                  t
        j                  j$                  j                  d	       |r|j'                          | j(                  D ]M  }|j*                  s'|j,                  t
        j                  j                  k(  r7d
|_        |j1                          O | j1                  d       yy)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{99==|UY[_[b[bFcGRTXZ[ZjZjZmZmFnFp= q	*::DJ  &&djjoo=JJ##1B1B1F1F(J[J[J_J_1F1`1j1j1l-.-=-=-B-B-H-H-.-=-=-B-B-H-H%' ( %%',, ;;#"3"3q7G7G7J7J"J%+"
	
 III%rv   c                 B   | j                   r#| j                   j                  j                  dk7  ry | j                   j                  j                  g d       | j                  | j                   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                   j                          y y )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   {{dkk//::nL%% '= 	> 59II126++2B2B/26++2B2B/'+{{$))113.(,%;;''KK (rv   c                    dd}| j                   j                  r| j                   j                  ryt        j                  }g d|d<   dg|d<   dg|d<   g d	|d
<   t        j
                  }|j                  d       |j                  d       |j                  d       |j                  d       |j                  d       |j                  d       |j                  d
       |j                  d       |j                  d       |j                  d       t        j                  | j                   j                  t        j
                  |      | _         t        |g      }|j                  | j                   j                        | _         t        | j                   j                  d      }|j                  d      }t        |      D ]t  \  }}|j                  d      }	|	j                  d|       |j                   d   |	j                   d<   d|	j                   d<   d|	j                   d<   |j                  ||	       v |j#                         | _         y)u   
        Защита от инжектов которые могу прилететь из внешних систем
        :return:
        c                 \    | j                  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   s<    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   s   	 yy##tyy'8'8..
6
5%Y
6(\
69
7""ECDEEFGHL!FLLdiiooF<O<O\fg	:,/NN499??3	TYY__m<u%' 	!FAs<<$DKK3!$5!1DJJv",DJJw#+DJJx KK4 	! MMO	rv   c                     | j                          | j                          | j                          | j                          | j	                          t        |   |i |S N)r   _calc_notify_calc_cacher   r   superr   )r   argsr   	__class__s      r1   r   zCmfChatMessage.save   sO    w|T,V,,rv   c                      y)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                   rR| j                   j                  | _        | j                   j                  | _        | j                   j
                  | _        y y r   )ra   logincache_cmf_author_loginr}   cache_cmf_author_coder   cache_cmf_author_namer   s    r1   r   zCmfChatMessage._calc_cache   sD    ??*.//*?*?D')-)=)=D&)-)=)=D& rv   c                     | j                  dg       | j                  r| j                  j                          t        t        |           y )Ndeal)r   r   rh   r   r   r   r   s    r1   rh   zCmfChatMessage.emit   s5    &"99IINNnd(*rv   c                 *    t         |          g dz   S )N)zparent.groupra   r   )r   save_preload_fieldsr   s    r1   r   z"CmfChatMessage.save_preload_fields   s    w*,/UUUrv   c           	      z   | j                   r| j                  }|j                  }t        j                  j                  | j                  |d|j                   d|j                   d| j                  j                  | j                          t        j                  || | j                        j                          y )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))KK <RWWIYrwwiWYZIIOO *  	((	4TXT_T_(`eegrv   c                 n    | j                  dg       | j                  j                  j                         S )Nr   )r   r   	executors
all_nested)r   r   r   s      r1   r   z#CmfChatMessage.all_relation_persons
  s+    (${{$$//11rv   FforceTEXKOM_db_deleteskip_owner_checkc                *   |r~t         j                  j                  | d      D ]  }d |_        |j	                  d        t         j
                  j                  | d      D ]  }d |_        |j	                  d        t        |    ||||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388d\`8a -%)$t,- w~t5CSfv  B  {A  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      s    "11== A
 
K PK PKd 
 
0"-$^-/>+Vh2 #(%RW 	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     sF         ! $      ; /DB%44 DBrv   