
    iPD                         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                   z     e Zd Zd Zd Zedd       Zd Z fdZd Z	 fdZ
ddZ fd	Zd
d fd
Zd Z xZS )CmfCustFieldc                 ,	   | 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| j                   d6k(  rd7| _        d8| _        d| _        d9| _        y| j                   d:k(  rd;| _        d| _        d| _        d9| _        y| j                   d<k(  rd*| _        d=| _        d>g| _        yy)?u-   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
choice_extCmfRelationExtCmfRelationCUSTOM_CHOICE_MODEL_EXTchoice_multi_ext	CmfM2MExttasksCmfTasksCmfTask)
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##|3.DO'DKDI2DJ##'99)DO"DKDI2DJ##w.-DO$DK$+DK /r   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_indexrM   varscmffieldsrP   r?   
issubclassr   rO   )rW   	field_clss     r   _calc_fullsearch_indexz#CmfCustField._calc_fullsearch_indexv   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                        }|rb|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       |j,                  dk7  rt        d| d       y 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)bqlre   rf   icur_operpartsrecursive_params_searchs         r   rt   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   Данное поле не поддерживает фильтрацию)rP   rT   rL   >   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    не поддерживает фильтрациюrI   uK   Фильтр корректный. Результат фильтрации u    записейu-   Ошибка проверки фильтра )NN)ri   rT   r   options_list_bqlrM   options_list_paramsr?   stripjsonloadsJSONDecodeErrorrO   load_fieldsrj   r   itemssetattrdictrP   cmfutilget_model_by_namecountrL   CmfOrmError)conf_objcust_field_objr   er   
list_opers
like_opers
obj_fieldsctx_field_namefilter_oper_setctx_field_valuer   	obj_countrR   rt   s                 @r   check_filter_optionsz!CmfCustField.check_filter_options   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%777B!$opyoz  {J  #K  L CY  / %( '' VW_WpWpVqqstusvw  @D  Eb # S  MaSQRRSs1   )H D=I I*II	I1I,,I1c                 &    | j                  |        y N)r   rV   s    r   _calc_filter_optionsz!CmfCustField._calc_filter_options   s    !!$'r   c                 .    g d}t         |          |z   S )N)dirtyrU   cmf_model_namerP   rL   )supersave_preload_fields)rW   r]   	__class__s     r   r   z CmfCustField.save_preload_fields   s    Zw*,v55r   c                     t        t        j                  | j                  j                        j
                  j                               dk\  rt        dd       y y )Ni@  u2   Превышен лимит в 1600 колонокTr   )rl   r   r   r   r?   r]   keysrO   rV   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                  rht        dd       nZ| j                          | j                  dk(  r;| j                  j                  s%t        j                  j                  d      | _        | 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-        | \  |i |}| j                  r4t1        t              | j2                  j(                     j5                          |S )NuY   Нельзя менять системное имя поля, создайте новоеTr   uF   Нельзя менять тип поля, создайте новоеrI   zsystem.link)codecf_uY   Системное имя должно обязательно начинаться с cf_>   namecaptionchoicescommentrU   visiblereadonlyrequiredrP   placeholderdisabled_choicesrZ   allow_multichoicefilter_cur_projectr   options_list_show_columnsoptions_list_search_columns)rM   r?   ua   Не правильный формат хранения значения по умолчанию u6   , используйте пример dict(value=None))rN   r   rM   rO   rP   r   rL   task_relation_typerT   CmfRelationTypegetrX   r`   r   rm   r   rh   r   rU   ri   r?   r   r   saver[   r   custom_field_sync)rW   argskwargscritical_fieldschanged_fieldsresr   s         r   r   zCmfCustField.save   s   {{yy##u  ~B  C))bjno %%09P9P9[9[*0*@*@*D*D-*D*X'$$&##%!!#yy##E*qy}~zz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                    t        |j                  | j                        }| j                  rX|j                  D ]I  }t        j                  j                  dd|i|r%t        j                  dd|i|j                          K | j                  rF|j                  D ]6  }t        j                  j                  dd|i|}|s'|j                          8 y y )N)out_linkrelation_typein_linkr   )r   instancer   task_create_relationchanges_appendedrT   CmfRelationOptionr   r   task_remove_relationchanges_removeddelete)rW   field_relation_kwargstaskrelations        r   calc_tasks_fieldzCmfCustField.calc_tasks_field  s    ^^11

 $$..  ++//  & ((  & $& $$-- &!3377  &
 OO%& %r   c                 F    | j                          t        |   |i |}|S r   )rX   r   _save_import)rW   r   r   r   r   s       r   r   zCmfCustField._save_import1  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)
rT   CmfCustFieldConfFieldrj   r   r   r   r[   r   r?   r   )rW   r   r   r   
conf_fieldr   s        r   r   zCmfCustField.delete6  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      s|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<   | j.                  dk(  r| j0                  |d<   | j2                  |d<   |S )N)
class_namer   rP   M2MM2MExtTrightrQ   r   r   r?   rU   r   r   rZ   r   rT   rR   r   r   r   r   r   rS   rI   r   r   )r   r   r?   r   rP   endswithr   r   r   rU   r   field_readonlyrZ   r   is_nullrT   rR   r   r   r   r   r   rS   rL   r   r   )rW   results     r   get_metazCmfCustField.get_meta=  st   1 LL..y#44|,((/6,3G3P3PQY3Z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!!W,*.*@*@F&'+/+B+BF'(r   r   )r   zcmf.fields.Field)r   r   r	   rX   r`   staticmethodr   r   r   r   r   r   r   r   r   __classcell__)r   s   @r   r   r      sY    h&T
P \S \S|(6X$L&>
 .3 D(r   r   )	collectionsr   cmf.includecmf.fields.cmf_cust_fieldr\   r   r]   cmf_cust_fieldr   r   r   r   <module>r      s6    #    Z3::,,99 Zr   