U
    hp4                     @   s8   d dl T d dlZG dd dZG dd dejjjZdS )    )*Nc                   @   s   e Zd ZdZdS )
_NamespacezNamespace classN)__name__
__module____qualname____doc__ r   r   ./cmf/models/cmf_cust_field.pyr      s   r   c                       s|   e Zd Zdd Zdd ZedddZdd	 Z fd
dZdd Z	 fddZ
 fddZdd fdd
Zdd Z  ZS )CmfCustFieldc                 C   s  | j jsdS | js"tddd dS | j dkrHd| _d| _d| _d| _n| j d	krnd| _d| _d| _d| _n| j d
krd| _| j| _n| j dkrd| _| j| _nn| j dkrd| _| j| _nR| j dkrd| _| j| _n6| j dkrd| _| j| _n| j dkrd| _| j| _n| j dkr6d| _| j| _n| j dkrTd| _| j| _n| j dkrrd| _| j| _n| j dkrd| _| j| _n| j dkrd| _d| _d| _d| _n\| j d krd!| _| j| _n>| j d"krd#| _| j| _n | j d$krd%| _| j| _d&g| _n| j d'kr<d%| _| j| _d(g| _n| j d)kr`d*| _| j| _d(g| _n| j d+krd*| _| j| _d,g| _n| j d-krd*| _| j| _d.g| _nl| j d/krd0| _| j| _d1d2i| _	nF| j d3krd%| _| j| _d4g| _n"| j d5krd*| _| j| _d4g| _dS )6u-   DEPRECATED не копировать
        Nu-   Нелья менять шаблон поляTabortZchoice_cascade_multiZCmfM2MZCUSTOM_CHOICE_MODELZCmfCascadeChoiceZchoice_multitextZCmfTextstrCmfStrintZCmfIntfloatZ
CmfNumericZphoneZCmfPhoneZloginZCmfLoginZemailZCmfEmailurlZCmfUrlZ
choice_strZ	CmfChoiceZ
choice_intZCmfChoiceIntZtagsZCmfMarkdateZCmfDateZdatetimeZCmfDateTimeZcompanyCmfGenericRelationZ
CmfCompanyuserZ	CmfPersonZusersCmfGenericM2MZrolesZCmfRolegroupsZCmfPersonGroupZcheckboxZCmfBoolvalueFZassetZCmfAssetZassets)
field_custom_type
is_changedis_new	cmf_alert
field_typeleftmodelwidgetmodelsdefaultselfr   r   r	   _calc_custom_field_type
   s    















z$CmfCustField._calc_custom_field_typec                 C   sJ   | j jsd S | j r>ttj| jj }t|tjjs>t	ddd t	d d S )Nuo   Индексация доступна лишь для полей строкого/текстового типаTr   uz   Применится только для новых объектов или при полной переиндекации)
fullsearch_indexr   varscmffieldsr   r   
issubclassr   r   )r$   Z	field_clsr   r   r	   _calc_fullsearch_indexf   s    z#CmfCustField._calc_fullsearch_indexNc           
   
      s  |st | tjr| }| jjs d S d | _| jr:| jj | _| jrd fdd	 zt	| jj}W n@ tj
k
r } z td| j d| dd  W 5 d }~X Y nX |r|stddd |dd	d
g zt |}|r|| _t }|D ]}t||d  qt|d}d }|jdkrDd}|jD ]}	|t|	j||d7 }q"ntd| j ddd td| d W n2 tk
r } ztd|  W 5 d }~X Y nX d S )Nc                    s`   |d krt  }t| tr0| D ]} ||d qn,t| tr\| dr\| d}||d  |S )N)
fields_setz__SELF..   )set
isinstancelistr   
startswithsplitadd)Zbqlr,   ipartsrecursive_params_searchr   r	   r8      s    

zBCmfCustField.check_filter_options.<locals>.recursive_params_searchu:   Не корректное значение фильтра z: Tr   uH   Данное поле не поддерживает фильтрациюr   r!   r   )ZSELF)r   r   r   )filterfilter_contextu   Тип поля u3    не поддерживает фильтрациюuK   Фильтр корректный. Результат фильтрации u    записейu-   Ошибка проверки фильтра )N)r0   r!   r
   options_list_bqlr   options_list_paramsr   stripZjsonloadsZJSONDecodeErrorr   Zload_fieldsr1   r   setattrdictr   cmfutilget_model_by_namecountr   ZCmfOrmError)
Zconf_objZcust_field_objr;   er<   Z
obj_fieldsZctx_field_namer:   Z	obj_countr   r   r7   r	   check_filter_optionsr   sL    

 z!CmfCustField.check_filter_optionsc                 C   s   |  |  d S N)rE   r#   r   r   r	   _calc_filter_options   s    z!CmfCustField._calc_filter_optionsc                    s   dddg}t   | S )Ndirtyr"   cmf_model_name)supersave_preload_fields)r$   r)   	__class__r   r	   rK      s    
z CmfCustField.save_preload_fieldsc                 C   s,   t t| jjj dkr(tddd d S )Ni@  u2   Превышен лимит в 1600 колонокTr   )lenrA   rB   rI   r   r)   keysr   r#   r   r   r	   _check_limit   s    zCmfCustField._check_limitc                    s  | j s0| jjrtddd | jjr8tddd n|   |   |   |   | j	dshtddd | j
sddd	d
dddddddddddh}t| jdd}||@ rd| _
| jrt| jjtrd| jkrtd| j ddd d S t j||}| j
rtt| jj   |S )NuY   Нельзя менять системное имя поля, создайте новоеTr   uF   Нельзя менять тип поля, создайте новоеZcf_uY   Системное имя должно обязательно начинаться с cf_captionr   placeholdernamer&   commentr"   visiblereadonlydisabled_choiceschoicesrequiredr<   options_list_show_columnsoptions_list_search_columns)r   r   ua   Не правильный формат хранения значения по умолчанию u6   , используйте пример dict(value=None))r   rS   r   r   r   rP   r%   r+   rG   r2   rH   r/   rO   r"   r0   r   r@   rJ   saver'   r!   rI   custom_field_sync)r$   argskwargsZcritical_fieldsZchanged_fieldsresrL   r   r	   r\      sL                zCmfCustField.savec                    s   |    t j||}|S rF   )r%   rJ   _save_import)r$   r^   r_   r`   rL   r   r	   ra      s    zCmfCustField._save_importF)TEXKOM_db_deletec                   s^   t jj| |dD ]}|j|d|i| qd| _t j|d|i| tt | jj 	  d S )N)Z
cust_fieldZinclude_deletedrb   T)
r!   ZCmfCustFieldConfFieldr1   deleterH   rJ   r'   rI   r   r]   )r$   rb   r^   r_   Z
conf_fieldrL   r   r	   rc      s
    zCmfCustField.deletec                 C   sb  t | jjd}| jj|d< | jj|d< |d drL| jrDd|d< nd|d< | jr^| jj|d< | jrp| jj|d	< | j	d
 |d< | j
j|d< | jj|d< | j|d< | jjs| jj|d< | jjs| jj|d< | jjs| jj|d< | jjs| jj|d< | jjs| jj|d< | jjs| jj|d< | jjs2| jj|d< | jjsH| jj|d< | jjs^| jj|d< |S )N)
class_namerQ   r   ZM2MTrightr   rR   rT   r   r"   rU   rV   r&   rY   r!   r   rX   rW   r<   rZ   r[   r    )r@   rS   r   rQ   r   endswithre   rR   rT   r"   rU   Zfield_readonlyr&   rY   Zis_nullr!   r   rX   rW   r<   rZ   r[   r    )r$   resultr   r   r	   get_meta   sD    






zCmfCustField.get_meta)N)r   r   r   r%   r+   staticmethodrE   rG   rK   rP   r\   ra   rc   rh   __classcell__r   r   rL   r	   r
   	   s   \Fr
   )Zcmf.includeZcmf.fields.cmf_cust_fieldr(   r   r)   Zcmf_cust_fieldr
   r   r   r   r	   <module>   s   