U
    N~i"                     @   s2   d dl T d dlT ddlmZ G dd dejZdS )    )*   )cmf_chat_topicc                       s   e Zd Zejjdddg Zdd Zdd Z fdd	Z fd
dZ	e
d ddZdd ZddddZd!ddZ fddZdd ZdddddZdd Z  ZS )"CmfChatTopic	mark_readsend_messageload_historyc                 C   s   t jj| |d d S )Nparenttext)modelsZ
CmfCommentZadd_comment_audit)selfr    r   !./common/models/cmf_chat_topic.pyaudit   s    zCmfChatTopic.auditc                 C   s   | j jsd S | jsdd | j  D }tjjdd|gdd| jggdD ]}|  qF| j j	D ]*}|| j j
kr\| tjj d|j  q\| j D ]*}|| j j	kr| tjj d	|j  qd S )
Nc                 S   s   g | ]
}|j qS r   id.0objr   r   r   
<listcomp>   s     z0CmfChatTopic._calc_executors.<locals>.<listcomp>	person_idzNOT INchat_topic_id==filteru    удалил из чата u    добавил в чат )	executors
is_changedis_newZ
all_nestedr   CmfChatTopicUnreadMessagelistr   deleteoldvaluer   gcurrent_personname)r   Zall_executorsunreadexecutorr   r   r   _calc_executors   s    


zCmfChatTopic._calc_executorsc                    s   t   dddg S )Ngroupr   group.executors)supersave_preload_fields)r   	__class__r   r   r-       s    z CmfChatTopic.save_preload_fieldsc                    s   | j r4| jjr| jj| _tj| jjkr4| jtj | jj	rr| jjsr| jj
dkrrtj}|j| jjkrr| jd| _| j	r| jr| j  |   t j||}| jj	r| jr|  D ],}td|j | jj| jjjd|gd q|S )NCLOSED	IN_REVIEWzarchive-topic-Ztopic_idgroup_idZevent_persons)r   r   Zis_nullr*   r$   r%   r#   appendstatusr   status_typer   Z	cmf_ownerworkflowZget_default_statusemitr)   r,   savecmf_archivedall_relation_personscmf_emit_eventcode)r   argskwargsr%   instpersonr.   r   r   r:   #   s*    

zCmfChatTopic.saveNc                 C   sX   t j}dd|jggdddgddddgd	d
|ggg}tjj|ddddgd}dd |D S )ux   
        Получаем все p2p чаты для текущего пользователя
        :return:
        r   INr3   z!=NORcache_status_typer0   r>   =	group.p2pr*   status.status_typer   fieldsc                 S   s   g | ]}|j jr|qS r   )r*   p2p)r   rowr   r   r   r   D   s      z*CmfChatTopic.p2p_chats.<locals>.<listcomp>)r$   r%   r   r   r   r    )clsZ	chat_coder%   Z	filter_lsresr   r   r   	p2p_chats9   s     
zCmfChatTopic.p2p_chatsc                 O   s*   |  dg | jjjdkr&tddd d S )NrH   )r0   r1   u.   К сожалению тема закрыта.T)abort)load_fieldsr6   r7   r#   Z	cmf_alert)r   Zcommentr?   r@   r   r   r   _comment_save_hookF   s    zCmfChatTopic._comment_save_hook)rJ   c                O   s   |  ddg | jjrtjjdddgddtjjggddd	d
gggdgd}d }| jj	D ]}|jtjjkrV qnqVg }|D ]&}|jdd |j	D krv|
|j qvtjjdd|gddd	d
ggg|dgdS tjjdd| jjgddd	d
ggg|dgdS )NrG   r+   rK   r   Tr   rC   rE   r0   r1   rI   c                 S   s   g | ]
}|j qS r   r   r   r   r   r   r   Y   s     z-CmfChatTopic.load_history.<locals>.<listcomp>r3   Zcmf_modified_at)r   rJ   Zorder_by)rQ   r*   rK   r   ZCmfChatGroupZslistr$   r%   r   r   r5   r   )r   rJ   r?   r@   rO   rB   groupsZchatr   r   r   r   K   s:    zCmfChatTopic.load_historyc                 C   s   t d| j ||  d d S )Nzchat-message-r4   )r=   r   r<   )r   datar   r   r   
emit_eventd   s    zCmfChatTopic.emit_eventc                    s   t  j||S )N)r,   toggle_check)r   r?   r@   r.   r   r   rV   g   s    zCmfChatTopic.toggle_checkc                 K   sz   |  dg tjjdd| jgddtjjggdddgdD ]<}|j sHq8t	d	tjj
 | jj| jjjd
tjgd q8d S )Nr*   r   r   r   messagezmessage.viewsz'message.channel_messages.message_statusrI   z
mark-read-r2   r4   )rQ   r   r   r    r   r$   r%   rW   r   r=   r>   r#   r*   )r   r@   Zunread_commentr   r   r   r   k   s    

zCmfChatTopic.mark_readr   )
channel_idpriority_msgc                O   s  |  ddg | j}|r@tt|dd  }|j|d}|| _| jrR| jdd tj| |d}|jdd |r| j	D ]|}	|	j
tjj
krqv|	jrqv|	 d	d
dg |	jjp|	jj}
|
sqv|j|
||d}||_|jr|js|j|_|  |  qvn"tj| |d}d|_||_|  |j
S )up   
        Отправляем сообщение в чат (Копроротивный, Whatsapp, тд)
        zexecutors.user_localdefault_channel:r   r   T)Z	only_data)r
   priorityphone_mobilephoneZcompany)chat_messager	   sent)rQ   rZ   varsr   splitgetr   r:   ZCmfChatMessager   r   r$   r%   Z
user_localr]   numberr^   r   r_   r
   ZdealZCmfChannelMessageZmessage_status)r   rW   rX   rY   r?   r@   ZchannelZchannel_modelr_   rB   Zphone_numberZchannel_msgr   r   r   r   v   s>    
zCmfChatTopic.send_messagec                 O   sF   |  dddg tjjdd| jgdD ]}|  q&d| _|   dS )	u8   
        Архивируем тему чата
        r6   r8   Zactivityr   r   r   TN)rQ   r   r   r    r   r!   r;   r:   )r   r?   r@   r'   r   r   r   archive   s
    
zCmfChatTopic.archive)N)N)__name__
__module____qualname__r   r   Zapi_methodsr   r)   r-   r:   classmethodrO   rR   r   rU   rV   r   r   re   __classcell__r   r   r.   r   r      s$   
)r   N)Zcmf.includeZ
cmf.fieldsrJ   r   r   r   r   r   r   <module>   s   