U
    $-d                     @   s2   d Z ddlT ddlmZ ejZG dd deZdS )uS   
"Клей" для связи почтового ящика с воронками.
    )*)	CmfEntityc                       sZ   e Zd Z fddZdd fdd
Zdd Zd	d
 Zdd Zedd Z	dd Z
  ZS )CmfLeadMailboxc                    s   t   dddg S )Nplugin	mailboxeszmailboxes.email)supersave_preload_fields)self	__class__ )./modules/mail/models/cmf_lead_mailbox.pyr      s    z"CmfLeadMailbox.save_preload_fieldsr   )depthc                   sl   t | jdkr$| jjr$| jd j| _| j jrV| jjsVtj| jd| d| _| j	  t
 j	|d|i|S )Nr   Zlead_mailbox)nametypeparentr   )lenr   r   is_nullemailr   loadmodelsZ	CmfPluginsaver   )r	   r   argskwargsr
   r   r   r      s    
zCmfLeadMailbox.savec                 C   sf   t jjdd|gdgd}|r |S td| | jjrBtd tdt j|| jd}td |  |S )	Nlead_email_name==filterZfieldsu)   Лида не нашли по sender = %su!   И воронку не нашлиup   Не удалось найти подходящую воронку продаж для создания лида)r   r   u5   А лида в итоге создаём нового)r   ZCmfLeadgetdebugpipeliner   
IndexErrorr   )r	   r   leadr   r   r   _get_or_create_lead   s    
z"CmfLeadMailbox._get_or_create_leadc                 C   sT  t d|j tjjdd|jgddddgggdd	gd
}|rJt d|| |S t d|j tjjd	d|jgddddgggdd	gd
}|rt d||j |S t d|j tjjdd|jgd}tjjdddd |D gddddgggdd	dgd
}|rt d|dd |j	D  |S t d|j t d | j
rHt d t d |j| j
dS t d d S )Nu+   Ищем сделку по id лида = %sZlead_idr   Zcache_status_typezNOT INZCLOSEDZFAILidzprimary_contact.emailr   u]   Нашли сделку %s по лиду %s, туда и будем писать письмоuG   Ищем сделку по email основного контакта %sux   Нашли сделку %s по основному контакту %s, туда и будем писать письмоu@   Ищем сделку по email других контактовr   r   contactsINc                 S   s   g | ]
}|j qS r   )r$   .0contactr   r   r   
<listcomp>@   s     z6CmfLeadMailbox._get_or_create_deal.<locals>.<listcomp>zcontacts.emailu}   Нашли сделку %s по не основному контакту %s, туда и будем писать письмоc                 S   s   g | ]}|qS r   r   r(   r   r   r   r+   F   s     uN   Не нашли... лид %s есть, а открытой сделки нетu{   Пытаемся создать сделку в воронке, к которой привязана лидоловушкаu?   Воронку нашли, создадим там сделкуu   Сделка сама создаст нам контакта по идее. lead.create_deal() ниже его должен создать.)r   uk   Не нашли воронку продаж, соответственно, не создали сделку)r   r$   r   ZCmfDealr   r   primary_contact	CmfPersonZslistr&   r    Zcreate_deal)r	   r"   dealr&   r   r   r   _get_or_create_deal)   sP    
 z"CmfLeadMailbox._get_or_create_dealc                 C   s   d}|rpt d|| |jr:|jj|kr:t d|| |j}n6|jjrpt d|| |jD ]}|jjrT|j|krT|}qT|st d| tjjdd|gd}|std	| d
| d| j	 ddd t d|| |S )u0    Либо находит, либо падает Nu<   Определяем контакт по сделке %s: %su`   Определяем контакт по основному контакту сделки %s: %suX   Определяем контакт по всем контактам сделки %s: %su`   Контакт всё ещё не найден. Ищем отправителя письма: %sr   r   r%   uc   Не найден контакт или воронка для создания нового: email z, deal z, pipeline .T)abortu"   Найден контакт %s: %s)
r   r,   r   r&   Z
is_definedr   r-   r   Z	cmf_alertr    )r	   r   r.   r*   Zsec_contactr   r   r   _get_contactR   s*    

zCmfLeadMailbox._get_contactc                 C   sL   d}| j jr td |d | _ }| jjr<td |d | _}|rH|   d S )NFu;   Обновляем отстутствующий person_fromTu@   Обновляем отсутствующего родителя)Zperson_fromr   r   r   r   )channel_msgr*   r   Zdirtyr   r   r   _update_channel_messagej   s    z&CmfLeadMailbox._update_channel_messagec                 C   s   |  dg | |j}|dk	s(td| |}| |j|}td|dk	 |dkrZ|n|}td| td|| | ||| dS )ua    Создание лидов на основе писем на специальную почту r    NuI   Не нашлось лида и не удалось его создатьu1   Итак найденность сделки = %su$   Выбрали родителем %su   Обновляем данные в channel_message, используемом вместо коммента! author=%s parent=%s)Zload_fieldsr#   Z	client_idAssertionErrorr/   r2   r   r4   )r	   r3   r"   r.   r*   r   r   r   r   receive_emailv   s    

zCmfLeadMailbox.receive_email)__name__
__module____qualname__r   r   r#   r/   r2   staticmethodr4   r6   __classcell__r   r   r
   r   r      s   )
r   N)__doc__Zcmf.includeZ
cmf.modelsr   ZloggingZwarningr   r   r   r   r   r   <module>   s   