U
    ܌f"                     @   s@   d dl mZmZ d dlT d dlT d dlmZ G dd deZdS )    )or_and_)*)CmfActiveEntityc                       s   e Zd Ze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| |dd  d S )N   )parenttextZ	log_level)modelsZ
CmfCommentsave)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.   r   cmf_archivedall_relation_personscmf_emit_eventcode)r   argskwargsr'   instpersonr0   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   INr5   z!=NORcache_status_typer2   r?   =	group.p2pr,   status.status_typer   fieldsc                 S   s   g | ]}|j jr|qS r   )r,   p2p)r   rowr   r   r   r   G   s      z*CmfChatTopic.p2p_chats.<locals>.<listcomp>)r&   r'   r   r   r   r"   )clsZ	chat_coder'   Z	filter_lsresr   r   r   	p2p_chats<   s     
zCmfChatTopic.p2p_chatsc                 O   s*   |  dg | jjjdkr&tddd d S )NrI   )r2   r3   u.   К сожалению тема закрыта.T)abort)load_fieldsr8   r9   r%   Z	cmf_alert)r   Zcommentr@   rA   r   r   r   _comment_save_hookI   s    zCmfChatTopic._comment_save_hook)rK   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 )NrH   r-   rL   r   Tr   rD   rF   r2   r3   rJ   c                 S   s   g | ]
}|j qS r   r   r   r   r   r   r   \   s     z-CmfChatTopic.load_history.<locals>.<listcomp>r5   Zcmf_modified_at)r   rK   Zorder_by)rR   r,   rL   r   ZCmfChatGroupZslistr&   r'   r   r   r7   r   )r   rK   r@   rA   rP   rC   groupsZchatr   r   r   r	   N   s:    zCmfChatTopic.load_historyc                 C   s   t d| j ||  d d S )Nzchat-message-r6   )r>   r   r=   )r   datar   r   r   
emit_eventg   s    zCmfChatTopic.emit_eventc                    s   t  j||S )N)r.   toggle_check)r   r@   rA   r0   r   r   rW   j   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_statusrJ   z
mark-read-r4   r6   )rR   r   r!   r"   r   r&   r'   rX   r   r>   r?   r%   r,   )r   rA   Zunread_commentr   r   r   r   n   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_message)r   r   sent)rR   r[   varsr   splitgetr   r   ZCmfChatMessager   r   r&   r'   Z
user_localr^   numberr_   r   r`   r   ZdealZCmfChannelMessageZmessage_status)r   rX   rY   rZ   r@   rA   ZchannelZchannel_modelr`   rC   Zphone_numberZchannel_msgr   r   r   r   y   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   
        Архивируем тему чата
        r8   r:   Zactivityr   r   r   TN)rR   r   r!   r"   r   r#   r<   r   )r   r@   rA   r)   r   r   r   archive   s
    
zCmfChatTopic.archive)N)N)__name__
__module____qualname__r   Zapi_methodsr   r+   r/   r   classmethodrP   rS   r	   rV   rW   r   r   rf   __classcell__r   r   r0   r   r      s$   
)r   N)Z
sqlalchemyr   r   Zcmf.includeZ
cmf.fieldsZcommon.models.cmf_active_entityr   r   r   r   r   r   <module>   s   