
    ri;                         d dl mZ d dl d dlZ G d d      Z G d dej                  j                  j                        Zy)    )defaultdict)*Nc                       e Zd ZdZy)
_NamespacezNamespace classN)__name__
__module____qualname____doc__     ./cmf/models/cmf_cust_field.pyr   r      s    r   r   c                   r     e Zd Zd Zd Zedd       Zd Z fdZd Z	 fdZ
 fdZd	d
 fd
Zd Z xZS )CmfCustFieldc                 0   | j                   j                  sy| j                  st        dd       y| j                   dk(  rd| _        d| _        d| _        d| _        y| j                   d	k(  rd| _        d| _        d| _        d| _        y| j                   d
k(  rd| _        | j                  | _        y| j                   dk(  rd| _        | j                  | _        y| j                   dk(  rd| _        | j                  | _        y| j                   dk(  rd| _        | j                  | _        y| j                   dk(  rd| _        | j                  | _        y| j                   dk(  rd| _        | j                  | _        y| j                   dk(  rd| _        | j                  | _        y| j                   dk(  rd| _        | j                  | _        y| j                   dk(  rd| _        | j                  | _        y| j                   dk(  rd| _        | j                  | _        y| j                   dk(  rd| _        d| _        d| _        d| _        y| j                   d k(  rd!| _        | j                  | _        y| j                   d"k(  rd#| _        | j                  | _        y| j                   d$k(  r!d%| _        | j                  | _        d&g| _        y| j                   d'k(  r!d%| _        | j                  | _        d(g| _        y| j                   d)k(  r!d*| _        | j                  | _        d(g| _        y| j                   d+k(  r!d*| _        | j                  | _        d,g| _        y| j                   d-k(  r!d*| _        | j                  | _        d.g| _        y| j                   d/k(  r"d0| _        | j                  | _        d1d2i| _	        y| j                   d3k(  r!d%| _        | j                  | _        d4g| _        y| j                   d5k(  r!d*| _        | j                  | _        d4g| _        yy)6u-   DEPRECATED не копировать
        Nu-   Нелья менять шаблон поляTabortchoice_cascade_multiCmfM2MCUSTOM_CHOICE_MODELCmfCascadeChoicechoice_multitextCmfTextstrCmfStrintCmfIntfloat
CmfNumericphoneCmfPhoneloginCmfLoginemailCmfEmailurlCmfUrl
choice_str	CmfChoice
choice_intCmfChoiceInttagsCmfMarkdateCmfDatedatetimeCmfDateTimecompanyCmfGenericRelation
CmfCompanyuser	CmfPersonusersCmfGenericM2MrolesCmfRolegroupsCmfPersonGroupcheckboxCmfBoolvalueFassetCmfAssetassets)
field_custom_type
is_changedis_new	cmf_alert
field_typeleftmodelwidgetmodelsdefaultselfs    r   _calc_custom_field_typez$CmfCustField._calc_custom_field_type   s{    %%00{{EdS!!%;;&DODI.DJ,DK##~5&DODI.DJ"DK##v-'DO//DK##u,&DO//DK##u,&DO//DK##w.*DO//DK##w.(DO//DK##w.(DO//DK##w.(DO//DK##u,&DO//DK##|3)DO//DK##|3,DO//DK##v-&DO#DKDI.DJ##v-'DO//DK##z1+DO//DK##y02DO//DK'.DK##v-2DO//DK&-DK##w.-DO//DK&-DK##w.-DO//DK$+DK##x/-DO//DK+,DK##z1'DO//DK#U+DL##w.2DO//DK%,DK##x/-DO//DK%,DK 0r   c                 "   | j                   j                  sy | j                   rat        t        j                        | j
                  j                     }t        |t        j                  j                        st        dd       t        d       y )Nuo   Индексация доступна лишь для полей строкого/текстового типаTr   uz   Применится только для новых объектов или при полной переиндекации)
fullsearch_indexrD   varscmffieldsrG   r?   
issubclassr   rF   )rN   	field_clss     r   _calc_fullsearch_indexz#CmfCustField._calc_fullsearch_indexh   su    $$//  SZZ()>)>?Ii):):;  L  TX  Y 	  O  	Pr   c           	         |st        | t        j                        r| }| j                  j                  sy d | _        | j                  r)| j                  j                  j                         | _        | j                  rdfd		 t        j                  | j                  j                        }|rR|st        dd       |j                  g d       	  |      }|rt        |      | _        h d}h d	}t               }|j                         D ]l  \  }}	d }
||	z  r'|	|z
  r t        d| j                   d
| d|	 d       g }
||	z  r'|	|z
  r t        d| j                   d
| d|	 d       d}
t!        |||
       n t#        |      }d }|j$                  dv r=d}|j                  D ]+  }|t&        j)                  |      j+                  ||      z  }- nt        d| j,                   dd       t        d| d       y y y # t        j                  $ r#}t        d| j                   d| d        d }~ww xY w# t.        $ r}t        d|        Y d }~y d }~ww xY w)Nc                 F   |t        t              }t        | t              r5t	        t        |             D ]  }d }|dk(  r| d   } | |   ||        |S t        | t              r9| j                  d      r(| j                  d      }||d      j                  |       |S )N      )
fields_setoperz__SELF..)
r   set
isinstancelistrangelenr   
startswithsplitadd)bqlr\   r]   icur_operpartsrecursive_params_searchs         r   rk   zBCmfCustField.check_filter_options.<locals>.recursive_params_search   s    % "-S!1Jc4("3s8_ ^#'6'*1vH/A:T\]	^ "!  S)cnnY.GIIcNEuQx(,,T2!!r   u:   Не корректное значение фильтра z: Tr   uH   Данное поле не поддерживает фильтрацию)rG   rK   rC   >   NOT IN
NOT EXISTSNOT HISTORYINEXISTSHISTORY	MEMBER_OF>   @@NOT LIKE	NOT ILIKE
SIMILAR TONOT SIMILAR TOLIKEILIKEu   : Со значением uF    используются несовместимые операции %)SELF)r3   r8   r   )filterfilter_contextu   Тип поля u3    не поддерживает фильтрациюuK   Фильтр корректный. Результат фильтрации u    записейu-   Ошибка проверки фильтра )NN)r`   rK   r   options_list_bqlrD   options_list_paramsr?   stripjsonloadsJSONDecodeErrorrF   load_fieldsra   r   itemssetattrdictrG   cmfutilget_model_by_namecountrC   CmfOrmError)conf_objcust_field_objr~   er   
list_opers
like_opers
obj_fieldsctx_field_namefilter_oper_setctx_field_valuer}   	obj_countrI   rk   s                 @r   check_filter_optionsz!CmfCustField.check_filter_optionst   s    *Xv7J7J"K%N((33'+$ $$(0(A(A(G(G(M(M(OH%$$""#'::h.G.G.M.M#N   % hquv**+XY*S*ABR*S'*7;<O7P4!pJ!qJ!+J=P=V=V=X M9*.%7.; )&`aiazaz`{ |@@N?O&lm|l}% +/	!0
 /1O%7.; )&`aiazaz`{ |@@N?O&lm|l}% +/	!0
 /2O
NOL%M& &*z%:N $I%004[[$%	%3%:%: XE%)B)B5)I)O)O'7 *P *X XIX "$4X5O5O4P  QD  #E  MQ  R klukv  wF  G  HY  / %( '' VW_WpWpVqqstusvw  @D  E` # S  MaSQRRSs1   )H D.I  H=H88H= 	I!	II!c                 &    | j                  |        y N)r   rM   s    r   _calc_filter_optionsz!CmfCustField._calc_filter_options   s    !!$'r   c                 .    g d}t         |          |z   S )N)dirtyrL   cmf_model_namerG   )supersave_preload_fields)rN   rT   	__class__s     r   r   z CmfCustField.save_preload_fields   s    Ew*,v55r   c                     t        t        j                  | j                  j                        j
                  j                               dk\  rt        dd       y y )Ni@  u2   Превышен лимит в 1600 колонокTr   )rc   r   r   r   r?   rT   keysrF   rM   s    r   _check_limitzCmfCustField._check_limit   sH    w(()<)<)B)BCJJOOQRTXXJRVW Yr   c                 >   | j                   sG| j                  j                  rt        dd       | j                  j                  rt        dd       n| j                          | j                          | j                          | j                          | j                  j                  d      st        dd       | j                  s+h d}t        | j                  d            }||z  rd| _
        | j                  rNt        | j                  j                  t               rd	| j                  vrt        d
| j                   dd       y t#        | H  |i |}| j                  r4t'        t(              | j*                  j                     j-                          |S )NuY   Нельзя менять системное имя поля, создайте новоеTr   uF   Нельзя менять тип поля, создайте новоеcf_uY   Системное имя должно обязательно начинаться с cf_>   namecaptionchoicescommentrL   visiblereadonlyrequiredrG   placeholderdisabled_choicesrQ   r   options_list_show_columnsoptions_list_search_columns)rD   r?   ua   Не правильный формат хранения значения по умолчанию u6   , используйте пример dict(value=None))rE   r   rD   rF   rG   r   rO   rW   r   rd   r   r_   r   rL   r`   r?   r   r   saverR   rK   r   custom_field_sync)rN   argskwargscritical_fieldschanged_fieldsresr   s         r   r   zCmfCustField.save   si   {{yy##u  ~B  C))bjno$$&##%!!#yy##E*qy}~zzcO !d!;<N/!
<<DLL,>,>!EX\XdXdIdyz~  {G  {G  zH  H~    GK  LglD+F+::L,,223EEG
r   c                 F    | j                          t        |   |i |}|S r   )rO   r   _save_import)rN   r   r   r   r   s       r   r   zCmfCustField._save_import   s(    $$&g"D3F3
r   F)TEXKOM_db_deletec                   t         j                  j                  | |      D ]  } |j                  |d|i|  d| _        t        |   |d|i| t        t               | j                  j                     j                          y )N)
cust_fieldinclude_deletedr   T)
rK   CmfCustFieldConfFieldra   deleter   r   rR   r   r?   r   )rN   r   r   r   
conf_fieldr   s        r   r   zCmfCustField.delete   s     66;;t]m;n 	RJJtQ6FQ&Q	R
J/?J6JVT((../AACr   c                    t        | j                  j                        }| j                  j                  |d<   | j                  j                  |d<   |d   j                  d      r| j                  rd|d<   nd|d<   | j                  r| j                  j                  |d<   | j                  r| 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                  s| j(                  j                  |d<   | j*                  j                  s| j*                  j                  |d<   | j,                  j                  s| j,                  j                  |d<   |S )N)
class_namer   rG   M2MTrightrH   r   r   r?   rL   r   r   rQ   r   rK   rI   r   r   r   r   r   rJ   )r   r   r?   r   rG   endswithr   r   r   rL   r   field_readonlyrQ   r   is_nullrK   rI   r   r   r   r   r   rJ   )rN   results     r   get_metazCmfCustField.get_meta  s1   1 LL..y#44|,((/zz"&w!%v$($4$4$:$:F=!<< $ 2 2F9 LL1y LL..y!0066z%)%:%:!"}}$$!%!4!4F:{{""#{{00F8zz!!"jj..F7O||## $ 2 2F9$$,,)-)>)>)D)DF%&''//,0,D,D,J,JF()--55262P2P2V2VF.///77484T4T4Z4ZF01{{""#{{00F8r   r   )r   r   r	   rO   rW   staticmethodr   r   r   r   r   r   r   r   __classcell__)r   s   @r   r   r      sS    Z'x
P [S [Sz(6X:
 .3 D%r   r   )	collectionsr   cmf.includecmf.fields.cmf_cust_fieldrS   r   rT   cmf_cust_fieldr   r   r   r   <module>r      s6    #    `3::,,99 `r   