U
    ܌f                     @   s`   d dl Z d dlZd dlT d dlmZ d dlmZmZ d dlm	Z	 d dl
m
Z G dd de	ZdS )	    N)*)	BaseModel)
CmfM2MBase
CmfNumeric)CmfActiveEntity)datetimec                       s   e Zd ZdZe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dd Z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g S )Nzdeals.status.status_typer   )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                    sd   |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}t j|f|||d|S )	Npersonsr   FZ
company_idr   r   Z
user_local)object_fieldsr   	object_id)r+   r   field_options_list)r   Zrelation_field_namer.   r   r/   r   r   r!   r"   r0   .   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cityZaddressZaddress_in_lawZinnZ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                    sR   |    t j||}| jjrN| jjrN| jjD ]}|jjdkr@q.|	dg q.|S )NZCLOSEDcompany)
_calc_servicedesk_allowr   saveZdealsr3   r   r(   statusZstatus_typeupdate)r%   r   r   resZdealr   r!   r"   r8   I   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-   r6   r8   Ztasksr   delete)r%   r   r   personZtaskr   r!   r"   r<   S   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 )Nr=   u   Новый клиент-   r1   )r   typer   r   r3   
rpartitionisdigitint)r%   Znumr!   r!   r"   
_calc_name`   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
   j   s    zCmfCompany.load_demo_datac              
   C   sZ  t  F 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 ]B}t|tjr|j  |jrq|tj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 )NrE   :r   idINr   Tforcer   ZLIKEu   Демо-данные%)r   r   r   )Z	only_datar	   )Zevent_persons)!ZcmfutilZdisable_aclrF   rG   rH   rI   rJ   isfilerK   rL   rM   rN   varsr*   splitappendlist
isinstanceZ
CmfProjectZ
is_defaultloadZCmfChatGroupr<   ZCmfDocumentr   r8   Zcmf_emit_eventgcurrent_user
contextlibsuppressFileNotFoundErrorremove)r   r5   ZidsZ_modelsZ_idZmodelobjdocr!   r!   r"   r	   q   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=membersrQ   rR   un   Чтобы убрать доступ в Service Desk, нужно убрать связь в проектах: Tr&   )r6   r   rS   )Zservicedesk_allowr(   r*   ZCmfProjectRoler+   ZCmfProjectRoleAssignrY   r)   Z	CmfPersonr\   r]   r#   r7   r8   )r%   Z
sdesk_roleZactive_sdesk_projectsr=   r!   r!   r"   r7      s    

z"CmfCompany._calc_servicedesk_allow)NNN)__name__
__module____qualname__Z	api_allowr   Zapi_methodsclassmethodr   r#   r,   r0   r4   r8   r<   rD   r
   r	   r7   __classcell__r!   r!   r   r"   r      s*   



r   )r^   shutilZcmf.includeZcmf.models.base_modelr   Zcmf.fields.base_fieldsr   r   Zcommon.models.cmf_active_entityr   r   Zdtr   r!   r!   r!   r"   <module>   s   