
    Uh"                     N    d dl mZmZ d dlT d dlT d dlmZ  G d de          ZdS )    )or_and_)*)CmfActiveEntityc                        e Zd Zej        g dz   Zd Zd Z fdZ fdZe	dd            Z
d Zdd	d
ZddZ fdZd ZddddZd Z xZS )CmfChatTopic)	mark_readsend_messageload_historyc                 d    t                               | |d                                           d S )N   )parenttext	log_level)models
CmfCommentsave)selfr   s     !./common/models/cmf_chat_topic.pyauditzCmfChatTopic.audit   s/    DA>>CCEEEEE    c                 $   | j         j        sd S | j        sd | j                                         D             }t          j                            dd|gdd| j        gg          D ]}|                                 | j         j	        D ]>}|| j         j
        vr.|                     t          j        j         d|j                    ?| j         D ]@}|| j         j	        vr.|                     t          j        j         d|j                    ?d S d S )	Nc                     g | ]	}|j         
S  id.0objs     r   
<listcomp>z0CmfChatTopic._calc_executors.<locals>.<listcomp>   s    KKKSVKKKr   	person_idzNOT INchat_topic_id==filteru    удалил из чата u    добавил в чат )	executors
is_changedis_new
all_nestedr   CmfChatTopicUnreadMessagelistr   deleteoldvaluer   gcurrent_personname)r   all_executorsunreadexecutors       r   _calc_executorszCmfChatTopic._calc_executors   sN   ~( 	F{ 	dKKt~/H/H/J/JKKKM :??V^`mHnIXZ^`d`gHhHj? k k     N. f f4>#777JJ!"2"7ddU]Ubddeee N d d4>#555JJ!"2"7bbS[S`bbccc	d 	dd dr   c                 N    t                                                      g dz   S )N)groupr&   group.executors)supersave_preload_fields)r   	__class__s    r   r:   z CmfChatTopic.save_preload_fields"   s%    ww**,,-V-V-VVVr   c                    | j         rY| j        j        r| j        j        | _        t          j        | j        j        vr$| j                            t          j                   | j        j	        r\| j        j        sP| j        j
        dk    r@t          j        }|j        | j        j        k    r| j                            d          | _        | j	        r | j        r| j                                         |                                   t#                      j        |i |}| j        j	        rU| j        rN|                                 D ]9}t+          d|j         | j        j        | j        j        j        d|g           :|S )NCLOSED	IN_REVIEWzarchive-topic-topic_idgroup_idevent_persons)r(   r&   is_nullr7   r/   r0   r.   appendstatusr'   status_typer   	cmf_ownerworkflowget_default_statusemitr5   r9   r   cmf_archivedall_relation_personscmf_emit_eventcode)r   argskwargsr0   instpersonr;   s         r   r   zCmfChatTopic.save%   s   ; 	8~% 6!%!5t~';;;%%a&6777;! 	L$+*= 	L$+BY]eBeBe-N DN$555"m>>{KK? 	tz 	JOOuww|T,V,,' 	zD,= 	z3355 z z===DGMLPJML_@a @aqwpxz z z z zr   Nc                     t           j        }dd|j        ggg ddg ddd|ggg}t          j                            |g d	          }d
 |D             S )ux   
        Получаем все p2p чаты для текущего пользователя
        :return:
        r&   IN)rA   !=NOR)cache_status_typerV   r=   rO   =)r&   	group.p2pr7   status.status_typer%   fieldsc                 *    g | ]}|j         j        |S r   )r7   p2p)r   rows     r   r    z*CmfChatTopic.p2p_chats.<locals>.<listcomp>G   s!    444cim4444r   )r/   r0   r   r   r   r+   )cls	chat_coder0   	filter_lsress        r   	p2p_chatszCmfChatTopic.p2p_chats<   s     )!4.*;)<=?W?W?WAAAFCQZC[\^	!&&%^%^%^ ' ` `44s4444r   c                 ~    |                      dg           | j        j        j        dv rt	          dd           d S d S )Nr[   )r=   r>   u.   К сожалению тема закрыта.T)abort)load_fieldsrF   rG   r.   	cmf_alert)r   commentrP   rQ   s       r   _comment_save_hookzCmfChatTopic._comment_save_hookI   sQ    ./000;"(,CCCFdSSSSSS DCr   )r]   c                Z   |                      ddg           | j        j        rt          j                            g dddt          j        j        ggddddgggdg	          }d }| j        j	        D ]}|j        t          j        j        k    r ng }|D ]4}|j        d
 |j	        D             v r|
                    |j                   5t          j                            dd|gddddggg|dg          S t          j                            dd| j        j        gddddggg|dg          S )NrZ   r8   )r_   r#   Tr&   rU   rX   r=   r>   r\   c                     g | ]	}|j         
S r   r   r   s     r   r    z-CmfChatTopic.load_history.<locals>.<listcomp>\   s     B B BC B B Br   rA   cmf_modified_at)r%   r]   order_byr#   )rh   r7   r_   r   CmfChatGroupslistr/   r0   r   r&   rE   r   )r   r]   rP   rQ   re   rS   groupschats           r   r   zCmfChatTopic.load_historyN   s   +'89::::> 	.+11:M:M:M;FqO_ObNc:d;NPTW_alVm:n:p ;F 2 H HI F*.  9 0 333E 4F! + +9 B B4> B B BBBMM$'***&,,T6*$dX{,CD5F +,	 - . . .
 "((*dDJM1R2EthXcMd1e1gou3D2E ) G G 	Gr   c                 ^    t          d| j         ||                                            d S )Nzchat-message-rB   )rN   r   rM   )r   datas     r   
emit_eventzCmfChatTopic.emit_eventg   s4    0tw00$dF_F_FaFabbbbbbr   c                 6     t                      j        |i |S N)r9   toggle_check)r   rP   rQ   r;   s      r   ry   zCmfChatTopic.toggle_checkj   s    #uww#T4V444r   c                    |                      dg           t          j                            dd| j        gddt
          j        j        ggg d          D ]g}|j                                        st          dt
          j        j
         | j        j        | j        j        j        dt
          j        g	           hd S )
Nr7   r"   r#   r!   )messagezmessage.viewsz'message.channel_messages.message_statusr\   z
mark-read-r?   rB   )rh   r   r*   r+   r   r/   r0   r{   r	   rN   rO   r.   r7   )r   rQ   unread_comments      r   r	   zCmfChatTopic.mark_readn   s   '###$>CC_^bdhdkLlMXZ^`a`p`sLtLvLw Lw Lw D x x 	a 	aN ")3355 ?(8(=??dgmimisivi|A}A}  OP  O_  N`  a  a  a  a  a	a 	ar   r   )
channel_idpriority_msgc                   |                      ddg           | j        }|rPt          t                    |                    d          d                  }|                    |          }|| _        | j        r|                     d           t                              | |          }|                    d           |r| j	        D ]}	|	j
        t          j        j
        k    r|	j        r%|	                     g d	           |	j        j        p|	j        j        }
|
sW|                    |
||
          }||_        |j        r'|j        s |j        |_        |                                 |                                 n>t                              | |          }d|_        ||_        |                                 |j
        S )up   
        Отправляем сообщение в чат (Копроротивный, Whatsapp, тд)
        zexecutors.user_localdefault_channel:r   r   T)	only_data)r   priority)phone_mobilephonecompany)chat_message)r   r   sent)rh   r   varsr   splitgetr'   r   CmfChatMessager&   r   r/   r0   
user_localr   numberr   r
   r   r   dealCmfChannelMessagemessage_status)r   r{   r}   r~   rP   rQ   channelchannel_modelr   rS   phone_numberchannel_msgs               r   r
   zCmfChatTopic.send_messagey   s    	02CDEEE& 	+ LL)9)9#)>)>q)ABM#'':'66G#*D ? 	&III%%%,,D<,PPD))) 	. # #9 0 333$ ""#G#G#GHHH%29PV\=P# %22<Wc2dd+7(% (l.? ((3(:L% %%'''  """"##& !22$W2MMK)/K&'3K$r   c                     |                      g d           t          j                            dd| j        g          D ]}|                                 d| _        |                                  dS )u8   
        Архивируем тему чата
        )rF   rI   activityr"   r#   r$   TN)rh   r   r*   r+   r   r,   rL   r   )r   rP   rQ   r3   s       r   archivezCmfChatTopic.archive   sv     	;;;<<<6;;OUY[_[bCc;dd 	 	FMMOOOO 		r   rx   )__name__
__module____qualname__r   api_methodsr   r5   r:   r   classmethodre   rk   r   rv   ry   r	   r
   r   __classcell__)r;   s   @r   r   r      s^       !- 1
 1
 1
 
KF F Fd d d W W W W W    . 
5 
5 
5 [
5T T T
 *. G G G G G2c c c c5 5 5 5 5	a 	a 	a 7; ' ' ' ' 'R	 	 	 	 	 	 	r   r   N)
sqlalchemyr   r   cmf.include
cmf.fieldscommon.models.cmf_active_entityr   r   r   r   r   <module>r      s                            ; ; ; ; ; ;c c c c c? c c c c cr   