
    i"                     N    d dl  d dl ddlmZ  G d dej                        Zy)    )*   )cmf_chat_topicc                        e Zd Zej                  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                 F    t         j                  j                  | |       y )Nparenttext)models
CmfCommentadd_comment_audit)selfr   s     !./common/models/cmf_chat_topic.pyauditzCmfChatTopic.audit   s    ++4d+C    c                    | j                   j                  sy | j                  sG| j                   j                         D cg c]  }|j                   }}t
        j                  j                  dd|gdd| j                  gg      D ]  }|j                           | j                   j                  D ]S  }|| j                   j                  vs| j                  t        j                  j                   d|j                          U | j                   D ]S  }|| j                   j                  vs| j                  t        j                  j                   d|j                          U y y c c}w )N	person_idzNOT INchat_topic_id==filteru    удалил из чата u    добавил в чат )	executors
is_changedis_new
all_nestedidr   CmfChatTopicUnreadMessagelistdeleteoldvaluer   gcurrent_personname)r   objall_executorsunreadexecutors        r   _calc_executorszCmfChatTopic._calc_executors   sH   ~~(({{/3~~/H/H/JKSVVKMK ::??V^`mHnIXZ^`d`g`gHhHj? k    !NN.. f4>>#7#77JJ!"2"2"7"7!88TU]UbUbTcdef !NN d4>>#5#55JJ!"2"2"7"7!88RS[S`S`Rabcd Ks   E-c                 *    t         |          g dz   S )N)groupr   group.executors)supersave_preload_fields)r   	__class__s    r   r2   z CmfChatTopic.save_preload_fields    s    w*,-VVVr   c                    | j                   r| j                  j                  r| j                  j                  | _        t        j
                  | j                  j                  vr)| j                  j                  t        j
                         | j                  j                  r| j                  j                  sl| j                  j                  dk(  rSt        j
                  }|j                  | j                  j                  k7  r | j                  j                  d      | _        | j                  r&| j                  r| j                  j                          | j!                          t#        | H  |i |}| j&                  j                  rr| j&                  rf| j)                         D ]S  }t+        d|j,                   | j                  j                  | j                  j                  j                  d|g       U |S )NCLOSED	IN_REVIEWzarchive-topic-topic_idgroup_idevent_persons)r   r   is_nullr/   r&   r'   r%   appendstatusr   status_typer    	cmf_ownerworkflowget_default_statusemitr-   r1   savecmf_archivedall_relation_personscmf_emit_eventcode)r   argskwargsr'   instpersonr3   s         r   rD   zCmfChatTopic.save#   sl   ;;~~%%!%!5!5t~~';';;%%a&6&67;;!!$++*=*=$++BYBY]eBe--N  DNN$5$55"mm>>{K??tzzJJOOw|T,V,''D,=,=335 z}=DGGMMLPJJMML_L_@aqwpxzz r   Nc                     t         j                  }dd|j                  ggg ddg ddd|ggg}t        j                  j                  |g d	      }|D cg c]  }|j                  j                  s| c}S c c}w )
ux   
        Получаем все p2p чаты для текущего пользователя
        :return:
        r   IN)r9   !=NOR)cache_status_typerO   r5   rH   =)r   	group.p2pr/   status.status_typer   fields)r&   r'   r    r   r   r"   r/   p2p)cls	chat_coder'   	filter_lsresrows         r   	p2p_chatszCmfChatTopic.p2p_chats9   s     ))!4.*;*;)<=?WAFCQZC[\^	!!&&%^ ' `"4ciimm444s   A81A8c                     | j                  dg       | j                  j                  j                  dv rt	        dd       y y )NrT   )r5   r6   u.   К сожалению тема закрыта.T)abort)load_fieldsr>   r?   r%   	cmf_alert)r   commentrI   rJ   s       r   _comment_save_hookzCmfChatTopic._comment_save_hookF   s>    ./0;;""((,CCFdS Dr   )rV   c                   | j                  ddg       | j                  j                  rt        j                  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                  k7  s+ n g }|D ]N  }|j                  |j                  D cg c]  }|j                   c}v s4|j                  |j                         P t        j                  j                  d
d|gddddggg|dg      S t        j                  j                  d
d| j                  j                  gddddggg|dg      S c c}w )NrS   r0   )rW   r   Tr   rN   rQ   r5   r6   rU   r9   cmf_modified_at)r   rV   order_byr   )r`   r/   rW   r   CmfChatGroupslistr&   r'   r    r   r=   r   )	r   rV   rI   rJ   r]   rL   groupschatr)   s	            r   r
   zCmfChatTopic.load_historyK   s   +'89:::>>++11:M;FqO_O_ObObNc:d;NPTW_alVm:n:p ;F 2 HI F**.. 99 0 0 3 33 F! +994>> BC BBMM$''*+ &&,,T6*$dX{,CD5F +,	 - . .
 ""((*dDJJMM1R2EthXcMd1e1gou3D2E ) G 	G !Cs   E<c                 V    t        d| j                   || j                                y )Nzchat-message-r:   )rG   r    rF   )r   datas     r   
emit_eventzCmfChatTopic.emit_eventd   s"    twwi0$dF_F_Fabr   c                 "    t        |   |i |S N)r1   toggle_check)r   rI   rJ   r3   s      r   rp   zCmfChatTopic.toggle_checkg   s    w#T4V44r   c                    | j                  dg       t        j                  j                  dd| j                  gddt
        j                  j                  ggg d      D ]  }|j                  j                         st        dt
        j                  j                   | j                  j                  | j                  j                  j                  dt
        j                  g	        y )
Nr/   r   r   r   )messagezmessage.viewsz'message.channel_messages.message_statusrU   z
mark-read-r7   r:   )r`   r   r!   r"   r    r&   r'   rr   r   rG   rH   r%   r/   )r   rJ   unread_comments      r   r   zCmfChatTopic.mark_readk   s    '#$>>CC_^bdhdkdkLlMXZ^`a`p`p`s`sLtLvLw D x 	aN "))335Z(8(8(=(='>?dggmmimisisivivi|i|A}  OP  O_  O_  N`  a	ar   r   )
channel_idpriority_msgc                   | j                  ddg       | j                  }|r=t        t              |j	                  d      d      }|j                  |      }|| _        | j                  r| j                  d       t        j                  | |      }|j                  d       |r| j                  D ]  }	|	j                  t        j                  j                  k(  r+|	j                  r8|	j                  g d	       |	j                  j                  xs |	j                   j                  }
|
s||j#                  |
||
      }||_        |j&                  r-|j(                  s!|j&                  |_        |j                          |j                           |j                  S t        j+                  | |      }d|_        ||_        |j                          |j                  S )up   
        Отправляем сообщение в чат (Копроротивный, Whatsapp, тд)
        zexecutors.user_localdefault_channel:r   )r    T)	only_data)r   priority)phone_mobilephonecompany)chat_messager   sent)r`   rw   varsr   splitgetr   rD   CmfChatMessager   r    r&   r'   
user_localr{   numberr|   r	   r~   r   dealCmfChannelMessagemessage_status)r   rr   rt   ru   rI   rJ   channelchannel_modelr~   rL   phone_numberchannel_msgs               r   r	   zCmfChatTopic.send_messagev   s    	02CDE&& L)9)9#)>q)ABM#'':'6G#*D ??III%,,D<,PD).. #99 0 0 3 33$$""#GH%2299PV\\=P=P#%22<Wc2d+7(%%l.?.?(3(:(:L% %%'  "##. 	 !22$W2MK)/K&'3K$r   c                     | j                  g d       t        j                  j                  dd| j                  g      D ]  }|j                           d| _        | j                          y)u8   
        Архивируем тему чата
        )r>   rA   activityr   r   r   TN)r`   r   r!   r"   r    r#   rE   rD   )r   rI   rJ   r+   s       r   archivezCmfChatTopic.archive   s_     	;<66;;OUY[_[b[bCc;d 	FMMO	 		r   ro   )__name__
__module____qualname__r   r   api_methodsr   r-   r2   rD   classmethodr]   rc   r
   rm   rp   r   r	   r   __classcell__)r3   s   @r   r   r      s}     --99 =
 
KDd W, 
5 
5T
 *. G2c5	a 7; 'R	r   r   N)cmf.include
cmf.fieldsrV   r   r    r   r   <module>r      s"      #b>.. br   