U
    {h*                     @   s2   d dl Z d dlT d dlmZ G dd dejZdS )    N)*)cmf_companyc                       s   e Zd ZdZejjdddg Zedddd fdd	
Z fd
dZ	 fddZ
ed" fdd	Z fddZ fddZ fddZdd Zedd Zeedddddd Zdd Z fd d!Z  ZS )#
CmfCompanyTclear_demo_dataload_demo_datasearch Nqueryfieldsfilterc                   sF   dddd gdddgg}ddddd	d
dg|d< t  j||||d|S )NORis_internal==Fnametextcodephone1phone2email1email2Zfields_filterr	   )superr   )clsr
   r   r   argskwargs	__class__ &./modules/person/models/cmf_company.pyr      s       zCmfCompany.searchc                    s   t   ddddg S )Nzdeals.status.status_typer   innkpp)r   save_preload_fieldsselfr   r   r   r!      s    zCmfCompany.save_preload_fieldsc                    sd   | j js| j jrV| jsV| j r6| j jdkrRtddd ntjjdddgdgdd| _ d S t	 
  d S )	NZsalesuP   Неправильный вид деятельности для компанииTabortr   r   r   )r   r   Zcache_inmemory)ZactivityZis_null
is_changedr   r   	cmf_alertmodelsZCmfActivitygetr   _calc_activityr"   r   r   r   r*      s    zCmfCompany._calc_activityc                    s   |dkrH|sg }|rH|rH| ddkrH|dd|gddddgddd ggg}|dkrr|sXg }|dd|gg}d	g i|d
< t j|f|||d|S )Npersonsr   FZ
company_idr   r   Z
user_localZmain_contact	CmfPersonZmodels_filters)object_fieldsr   	object_id)r)   r   field_options_list)r   Zrelation_field_namer-   r   r.   r   r   r   r   r/   )   s,      zCmfCompany.field_options_listc                    sh   ddddddddd	d
dg}|  | j d}|D ]"}| | jr.|d| | j 7 }q.||d< t jf |S )NZcityaddressZaddress_in_lawr   Zbank_accountZogrnr   r   r   r   Zwebsite_urlr    r   )load_fieldsZfull_search_fieldsvaluer   full_search_index)r#   r   Ztext_fieldsr   fr   r   r   r4   <   s      
zCmfCompany.full_search_indexc                    s   | j rxtjj| j | jddkrxtjj| j | jdd| jgd}d}|D ]}||j7 }qD|d| j  d| j 7 }t|d	d
 | 	  t
 j||}| jjr| jjr| jjD ]}|jjdkrq|dg q|S )N)r   r       idz!=)r   r    r   u.   Уже существует компания: u    с такими ИНН:u    и КПП:Tr$   ZCLOSEDcompany)r   r(   r   countr    listr7   r   r'   _calc_servicedesk_allowr   saveZdealsr3   r&   statusZstatus_typeupdate)r#   r   r   Zcmp_listZ	alert_strr8   resZdealr   r   r   r<   J   s    zCmfCompany.savec                    sT   |  ddg | jD ]}d |_|  q| jD ]}d |_|  q.t j|| d S )Nzpersons.companyztasks.company)r2   r+   r8   r<   Ztasksr   delete)r#   r   r   personZtaskr   r   r   r@   ]   s    



zCmfCompany.deletec                 C   sV   | j r
d S | jdkrR| jsRd| _ | jjdd }| rR|  j dt| 7  _ d S )NrA   u   Новый клиент-   r1   )r   typer   r   r3   
rpartitionisdigitint)r#   Znumr   r   r   
_calc_namej   s    zCmfCompany._calc_namec              
   C   sD   t jtjsg S ttjd}t| W  5 Q R  S Q R X d S )Nr)	ospathexistsconfigDEMO_IDS_FILEopenjsonloadsread)r   r5   r   r   r   r   t   s    zCmfCompany.load_demo_datau&   Удаление демо-данных)Z	only_oncedescriptionZshow_bg_progressbarc               
   C   s`  t  L tjtjr(tjtjs6W 5 Q R  d S ttjd} t	
|  }W 5 Q R X g }|D ]}tt|dd  }||krd|| |jdd|gdD ]H}t|tjr|j  |jrq|tjtjfkr|jdd q|  qqdtjjd	d
dgd	gdD ]}d|_|jdd qtdtjgd tt  t!tj W 5 Q R X W 5 Q R X d S )NrI   :r   r7   INr   Tforcer   ZLIKEu   Демо-данные%)r   r   r   )Z	only_datar   )Zevent_persons)"ZcmfutilZdisable_aclrJ   rK   rL   rM   rN   isfilerO   rP   rQ   rR   varsr(   splitappendr:   
isinstanceZ
CmfProjectZ
is_defaultloadZCmfChatGroupZCmfListr@   ZCmfDocumentr   r<   Zcmf_emit_eventgcurrent_user
contextlibsuppressFileNotFoundErrorremove)r5   ZidsZ_modelsZ_idZmodelobjdocr   r   r   r   {   s0    

zCmfCompany.clear_demo_datac                 C   s   | j jsd S | j sVtjjdd}tjjdd|gdd| gggd}|rVtd| d	d
 tjj| t	j
 dD ]}|jd	d |jrl|  qld S )Nzsdesk-client:default)r   Zproject_role=membersrU   rV   un   Чтобы убрать доступ в Service Desk, нужно убрать связь в проектах: Tr$   )r8   r   rW   )Zservicedesk_allowr&   r(   ZCmfProjectRoler)   ZCmfProjectRoleAssignr:   r'   r,   r_   r`   r!   r;   r<   )r#   Z
sdesk_roleZactive_sdesk_projectsrA   r   r   r   r;      s    

z"CmfCompany._calc_servicedesk_allowc                    s4   t j}| jrt  S |jddr&dS t jddS )NZContactAdmins)Z
group_codeTut    Либо нужно быть членом группы "Редакторы Компаний и Контактов".)Zadditional_error_msg)r_   r`   r   r   check_edit_permZin_person_group)r#   r`   r   r   r   ri      s    
zCmfCompany.check_edit_perm)NNN)__name__
__module____qualname__Z	api_allowr   r   Zapi_methodsclassmethodr   r!   r*   r/   r4   r<   r@   rH   r   staticmethodZcmf_deferred_jobr   r;   ri   __classcell__r   r   r   r   r      s.   

r   )ra   Zcmf.includeZmodules.person.fieldsr   r   r   r   r   r   <module>   s   