U
    cR#                     @   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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dd Z fddZdd Zd	ddddZdd Zdd  Z fd!d"Z  ZS )%CmfChatTopicc                 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j
dk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workflowget_default_statusemitr(   r+   r   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   A   s      z*CmfChatTopic.p2p_chats.<locals>.<listcomp>)r#   r$   r   r
   r   r   )clsZ	chat_coder$   Z	filter_lsresr   r   r   	p2p_chats6   s     
zCmfChatTopic.p2p_chatsc                 O   s*   |  dg | jjjdkr&tddd d S )NrG   )r0   r1   u.   К сожалению тема закрыта.T)abort)load_fieldsr6   r7   r"   Z	cmf_alert)r   Zcommentr>   r?   r   r   r   _comment_save_hookC   s    zCmfChatTopic._comment_save_hook)rI   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 )NrF   r*   rJ   r   Tr   rB   rD   r0   r1   rH   c                 S   s   g | ]
}|j qS r   r   r   r   r   r   r   V   s     z-CmfChatTopic.load_history.<locals>.<listcomp>r3   Zcmf_modified_at)r   rI   Zorder_by)rP   r)   rJ   r
   ZCmfChatGroupZslistr#   r$   r   r   r5   r   )r   rI   r>   r?   rN   rA   groupsZchatr   r   r   load_historyH   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_eventa   s    zCmfChatTopic.emit_eventc                 K   s   d S Nr   )r   _kwargsr   r   r   _audit_changesd   s    zCmfChatTopic._audit_changesc                    s   t  j||S rV   )r+   toggle_check)r   r>   r?   r.   r   r   rY   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_statusrH   z
mark-read-r2   r4   )rP   r
   r   r   r   r#   r$   rZ   	mark_readr<   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_message)r   r	   sent)rP   r^   varsr
   splitgetr   r   ZCmfChatMessager   r   r#   r$   Z
user_localra   Znumberrb   send_messagerc   r   ZdealZCmfChannelMessageZmessage_status)r   rZ   r\   r]   r>   r?   ZchannelZchannel_modelrc   rA   Zphone_numberZchannel_msgr   r   r   rh   v   s>    
zCmfChatTopic.send_messagec                 O   sN   |  dddg tjjdd| jgdD ]}|  q&| jd| _| 	  dS )	u8   
        Архивируем тему чата
        r6   r8   Zactivityr   r   r   r0   N)
rP   r
   r   r   r   r    r8   r9   r6   r   )r   r>   r?   r&   r   r   r   archive   s
    
zCmfChatTopic.archivec                 K   s   dS )ul   Не отправляем уведомления, у чата своя система уведомленийNr   )r   r	   r?   r   r   r   all_place_notify   s    zCmfChatTopic.all_place_notifyc                    s   t   dg S )NZlast_chat_message)r+   simple_perm_allow_fieldsr-   r.   r   r   rk      s    z%CmfChatTopic.simple_perm_allow_fields)N)N)__name__
__module____qualname__r   r(   r,   r   classmethodrN   rQ   rS   rU   rX   rY   r[   rh   ri   rj   rk   __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   