B
    bEf                 @   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kwargs)r
   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_namez==)filter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_idz==Zcache_status_typezNOT INZCLOSEDZFAILidzprimary_contact.email)r   r   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   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)   sB    
z"CmfLeadMailbox._get_or_create_dealc             C   s   d}|rtt d|| |jr:|jj|kr:t d|| |j}n:|jjrtt d|| x$|jD ]}|jjrV|j|krV|}qVW |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   z==)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+   r.   r   r0   )r	   r/   r    r*   r&   r   r   r   r   receive_emailv   s    

zCmfLeadMailbox.receive_email)__name__
__module____qualname__r   r   r!   r+   r.   staticmethodr0   r2   __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   