U
    -dc1                     @   s   d Z ddlZddlmZ ddlZddlmZ ddlT ddl	m
Z
 ddlmZ dd	lmZ dd
lmZ ddlmZ G dd dejjeZdddZdS )ug    Документация по выдаче VM: https://bcrm.carbonsoft.ru/project/Document/DOC-000884     N)CmfValidationError)commit_all_ds)*)acrm_register)ResponseMixin   )normalize_phone)
Supervisor)validate_org_namec                   @   s   e Zd ZdZdej dZdej dZe	j
jdd Ze	j
jdd	 Ze	j
jd
d Ze	j
jdd ZedddZe	j
jdd ZdS )CRMViewz/crmu,   Обратитесь в <a href="https://wwwu9   /support/">техническую поддержку</a>.u!   Перейдите по <a href="uf   /auth/signin?action=proceed">ссылке</a> чтобы повторить попытку позже.c                 C   s   dS )NzNo default action specified )selfr   r   ./modules/auth/views/crm.pypost   s    zCRMView.postc                 C   s  t d tjjjr$| dd| j S tj	d}|sF| dd| j S t
|\}}|sd| d| S zttjjj| W n*   td | dd| j  Y S X t  tjj	tjjd	}|s| dd
| j S |jjr| dd| j S ||_|  t ddd | d|S )u,  
        По куке получаем юзера и пытаемся застолбить за ним виртуалку. Email берём строго из куки!
        :return: служебный hostname виртуалки + кука с логином и scope с этим hostname
        assign  u5   Не удалось получить CRM. Код #1. org_nameu:   Не удалось получить ORG_NAME. Код #2. uP   Ошибка сервера, не удалось получить CRM. Код #3  uR   Ошибка сервера, не удалось получить CRM. Код #3. loginu(   Ошибка сервера. Код #4. u(   Ошибка сервера. Код #5. Tdoneu?   Успешно выдана виртуальная машина)pretty_log_linegauthr   is_null_error__support__requestvaluesgetr
   r	   r   valuelogging	exception__proceed__r   modelsCmfAuthscoper   save_ok)r   r   resZerr_textr   r   r   r   r      s0    

zCRMView.assignc                 C   sz   t d tjjjr&| dd| j S zt }t	
| W n"   td | dd Y S X t ddd | d	tjS )
u  
        Обновляем демо-данные внутри виртуальной машины пользователя в фоне,
        пока он заполняет форму с дополнительными данными для следующего этапа.
        :return: те же самые билеты авторизации, что и шагом выше.
        preparer   un   Ошибка: недостаточно прав для обновления демо-данных. Код #6. uQ   Произошла ошибка при подготовке демо-данныхr   ur   WARNING: Ошибка сервера, не удалось обновить демо-данные внутри CRM.Tr   uU   Демо-данные в виртуальной машине подготовлены)r   r   r   r'   r   r   r$   r   _get_org_name_from_scoper	   r+   r"   r#   r)   )r   r   r   r   r   r+   ?   s    

zCRMView.preparec                 C   s  t d tjjjr$| dd| j S ttj	
d}tj	
d}tj	
dd}tjj
tjjdd	dd
gd}z||_|  tf tj	 W nX tk
r   td| | jdddd Y S  tk
r   td | dd Y S X | s| dd| j S t  t }z(tj	
d}t|||jj||| W n(   td | dd| j  Y S X tjj
tjjd}|std | dd| j S |jjrtd | dd| j S t ddd | d|S )u   
        Получаем остальные данные для регистрации виртуалки и лида, делаем новый хостнейм.
        :return: билеты авторизации и hostname виртуалки
        brandingr   u>   Ошибка: не удалось выдать CRM. Код #7,phonecompanyZlead_contact_name r   r   r'   )r   ZfieldsuE   Введён некорректный номер телефона %s.u@   Введите корректный номер телефона.)Zproblem_fielduN   Не удалось обновить данные учётной записи.r   u   Не удалось обновить данные учётной записи. Пожалуйста, повторите попытку.u:   Не удалось зарегистрироваться. landing_projectuD   Произошла ошибка при брендировании VMu'   Ошибка сервера. Код #8.r   uq   Пользователь пропал из БД в процессе выдачи ВМ. Надо дебажить.u(   Ошибка сервера. Код #9. uy   Такое бывает при замаскированной ошибке в процессе CmfPerson.sync_accounts().u)   Ошибка сервера. Код #10. Tr   uA   Удалось выдать запрашиваемый домен)r   r   r   r'   r   r   r$   r   r   r   r    r%   r&   r   r.   r(   r   r   r"   r#   	Exceptionr   r   r   r,   r	   r-   r!   errorr)   )r   r.   r/   Z	user_namer   r   r1   r   r   r   r-   S   sH    





zCRMView.brandingNc                 C   s   | d krt j} tdd | jj D }t|dksDtd| j t|dks`td| j | }|d | jj kstd|S )	Nc                 S   s   g | ]}| d d qS ):r   )split).0r'   r   r   r   
<listcomp>   s     z4CRMView._get_org_name_from_scope.<locals>.<listcomp>r   ui   Пользователь не имеет прав ни на одну виртуальную машину    u{   Пользователь владеет более 1 CRM, не ясно какую именно переименовать z:AdminsuY   У пользователя нет административных прав на EvaTeam)	r   r   setr'   r!   r5   lenAssertionErrorpop)r   scopesr   r   r   r   r,      s    z CRMView._get_org_name_from_scopec           
      C   s  t jd}|s.d}td|  | dS |  dd }t	j
sRtdS tjjt	j
jjd}|srtd	S |jjr| jtd
|dS | }|s| jtd
|dS ||krd| d}td| d| d| dt	j
jj  | dS t jddkrzt|\}}}W n0 tk
rF } zd}t|}W 5 d}~X Y nX |dkrd}	td|	 d| d| dt	j
jj d| d|  | dS | jtd|dS | dS )uH  
        Сюда попадает клиент, когда у него остановлена vm по idle.
        Отображаем ему список vm, по клику запускаем restore и редиректим.
        TODO: в шаблоне поправить оформление и верстку
        	acrm_nameuG   Ошибка запуска системы. Не указано имя.u    Ошибка restore_idle_acrm: zcrm_restore_idle_acrm.html.r   z/auth/signinr   z#/auth/signout?next_url=/auth/signinz/auth/assign)r   u<   Нет доступа к указанной системе (u+   ), либо её не существует.z acrm_name=z	; scopes=z; email=run1r8   Nu   Ошибка запуска.z; res=z; out=/)r   r   r    r"   infoZrenderlowerstripr5   r   r   Zredirectr%   r&   Zemailr!   r'   r   r)   Zprepare_scopeZformr	   restore_idle_acrmr2   strr#   )
r   r>   r3   r   r=   _outr*   eZerror_restorer   r   r   rF      s@    
(

4
zCRMView.restore_idle_acrm)N)__name__
__module____qualname__Z__url__ZconfigZAUTH_SESSION_COOKIE_DOMAINr   ZAUTH_SERVER_URLr$   cmfviewsactionr   r   r+   r-   staticmethodr,   rF   r   r   r   r   r      s   

#

0r   Fc                 C   s@   d}t d|  d|  d|rdnd dtjj dd|  	 d S )N   = ZDONEZBEGIN)printr   r   r   )Zstager   lengthr   r   r   r      s    r   )F)__doc__ZidnaZcmf.base_errorr   Z	cmf.viewsrN   Zcmf.data_providers.baser   Zcmf.includeZcommon.acrmr   Zmodules.auth.views.responser   Zmodels.phoner   Zmodels.supervisorr	   Zmodels.org_namer
   rO   ZBaseViewr   r   r   r   r   r   <module>   s    5