B
    Y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 }x0tjjdd|gdd| jggdD ]}|  qHW x6| j j	D ]*}|| j j
krb| tjj d|j  qbW x4| j D ]*}|| j j	kr| tjj d	|j  qW d 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_idz==)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   z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rx8|  D ],}td|j | jj| jjjd|gd qW |S )NCLOSED	IN_REVIEWzarchive-topic-)topic_idgroup_id)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#   Zinstperson)r+   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   INr/   z!=NORcache_status_typer,   r9   =z	group.p2pr(   z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_lsZ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 )Nzstatus.status_type)r,   r-   u.   К сожалению тема закрыта.T)abort)load_fieldsr2   r3   r!   Z	cmf_alert)r   commentr:   r;   r   r   r   _comment_save_hookI   s    zCmfChatTopic._comment_save_hook)rA   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 }x | jj	D ]}|jtjjkrXP qXW g }x.|D ]&}|jdd |j	D krz|
|j qzW t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 )Nz	group.p2pzgroup.executorsrB   z==Tr   r=   r?   r,   r-   )r   rA   c             S   s   g | ]
}|j qS r   )r   )r   r   r   r   r   r   \   s    z-CmfChatTopic.load_history.<locals>.<listcomp>r/   Zcmf_modified_at)r   rA   Zorder_by)rG   r(   rB   r   ZCmfChatGroupZslistr"   r#   r   r   r1   r   )r   rA   r:   r;   rE   r<   groupsZchatr   r   r   r	   N   s,    


zCmfChatTopic.load_historyc             C   s   t d| j ||  d d S )Nzchat-message-)r0   )r8   r   r7   )r   datar   r   r   
emit_eventg   s    zCmfChatTopic.emit_eventc                s   t  j||S )N)r)   toggle_check)r   r:   r;   )r+   r   r   rM   j   s    zCmfChatTopic.toggle_checkc             K   s~   |  dg xltjjdd| jgddtjjggdddgdD ]<}|j sJq:t	d	tjj
 | jj| jjjd
tjgd q:W d S )Nr(   r   z==r   messagezmessage.viewsz'message.channel_messages.message_status)r   rA   z
mark-read-)r.   r/   )r0   )rG   r   r   r   r   r"   r#   rN   r   r8   r9   r!   r(   )r   r;   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 |rx| j	D ]|}	|	j
tjj
krqx|	jrqx|	 d	d
dg |	jjp|	jj}
|
sqx|j|
||d}||_|jr|js|j|_|  |  qxW n"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   Zsent)rG   rQ   varsr   splitgetr   r   ZCmfChatMessager   r   r"   r#   Z
user_localrT   ZnumberrU   r   rV   r   ZdealZCmfChannelMessageZmessage_status)r   rN   rO   rP   r:   r;   ZchannelZchannel_modelrV   r<   Zphone_numberZchannel_msgr   r   r   r   y   s>    zCmfChatTopic.send_messagec             O   sJ   |  dddg x&tjjdd| jgdD ]}|  q(W d| _|   dS )	u8   
        Архивируем тему чата
        r2   r4   Zactivityr   z==)r   TN)rG   r   r   r   r   r   r6   r   )r   r:   r;   r%   r   r   r   archive   s
    zCmfChatTopic.archive)N)N)__name__
__module____qualname__r   Zapi_methodsr   r'   r*   r   classmethodrE   rI   r	   rL   rM   r   r   rZ   __classcell__r   r   )r+   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   