
    B)i;                     v    d dl mZ d dlT d dlZ G d d          Z G d dej        j        j                  ZdS )    )defaultdict)*Nc                       e Zd ZdZdS )
_NamespacezNamespace classN)__name__
__module____qualname____doc__     ./cmf/models/cmf_cust_field.pyr   r      s        r   r   c                   x     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                    | j         j        sdS | j        st          dd           dS | j         dk    rd| _        d| _        d| _        d| _        dS | j         d	k    rd| _        d| _        d| _        d| _        dS | j         d
k    rd| _        | j        | _        dS | j         dk    rd| _        | j        | _        dS | j         dk    rd| _        | j        | _        dS | j         dk    rd| _        | j        | _        dS | j         dk    rd| _        | j        | _        dS | j         dk    rd| _        | j        | _        dS | j         dk    rd| _        | j        | _        dS | j         dk    rd| _        | j        | _        dS | j         dk    rd| _        | j        | _        dS | j         dk    rd| _        | j        | _        dS | j         dk    rd| _        d| _        d| _        d| _        dS | j         d k    rd!| _        | j        | _        dS | j         d"k    rd#| _        | j        | _        dS | j         d$k    rd%| _        | j        | _        d&g| _        dS | j         d'k    rd%| _        | j        | _        d(g| _        dS | j         d)k    rd*| _        | j        | _        d(g| _        dS | j         d+k    rd*| _        | j        | _        d,g| _        dS | j         d-k    rd*| _        | j        | _        d.g| _        dS | j         d/k    rd0| _        | j        | _        d1d2i| _	        dS | j         d3k    rd%| _        | j        | _        d4g| _        dS | j         d5k    rd*| _        | j        | _        d4g| _        dS dS )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 	F{ 	FdSSSSF!%;;;&DODI.DJ,DKKK#~55&DODI.DJ"DKKK#v--'DO/DKKK#u,,&DO/DKKK#u,,&DO/DKKK#w..*DO/DKKK#w..(DO/DKKK#w..(DO/DKKK#w..(DO/DKKK#u,,&DO/DKKK#|33)DO/DKKK#|33,DO/DKKK#v--&DO#DKDI.DJJJ#v--'DO/DKKK#z11+DO/DKKK#y002DO/DK'.DKKK#v--2DO/DK&-DKKK#w..-DO/DK&-DKKK#w..-DO/DK$+DKKK#x//-DO/DK+,DKKK#z11'DO/DK#U+DLLL#w..2DO/DK%,DKKK#x//-DO/DK%,DKKK 0/r   c                     | j         j        sd S | j         rYt          t          j                  | j        j                 }t          |t          j        j                  st          dd           t          d           d S )Nuo   Индексация доступна лишь для полей строкого/текстового типаTr   uz   Применится только для новых объектов или при полной переиндекации)
fullsearch_indexrD   varscmffieldsrG   r?   
issubclassr   rF   )rN   	field_clss     r   _calc_fullsearch_indexz#CmfCustField._calc_fullsearch_indexh   s    $/ 	F  	YSZ(()>?Ii):;; Y  L  TX  Y  Y  Y  Y 	  O  	P  	P  	P  	P  	Pr   Nc           	         |st          | t          j                  r| }| j        j        sd S d | _        | j        r#| j        j                                        | _        | j        rdfd		 t          	                    | j        j                  }n4# t          j
        $ r"}t          d| j         d| d            d }~ww xY w|r|st          dd           |                    g d           	  |          }|rt          |          | _        h d}h d	}t                      }|                                D ]n\  }}	d }
||	z  r&|	|z
  rt          d| j         d
| d|	 d           g }
||	z  r&|	|z
  rt          d| j         d
| d|	 d           d}
t!          |||
           ot#          |          }d }|j        dv r?d}|j        D ]4}|t&                              |                              ||          z  }5nt          d| j         dd           t          d| d           d S # t.          $ r}t          d|            Y d }~d S d }~ww xY wd S d S )Nc                    |t          t                    }t          | t                    rDt	          t          |                     D ]&}d }|dk    r| d         } | |         ||           'n`t          | t                    rK|                     d          r6|                     d          }||d                  	                    |           |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!1!1Jc4(( 3"3s88__ ^ ^#'66'*1vH//A:T\]]]]]	^
  S)) 3cnnY.G.G 3IIcNNEuQx(,,T22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-     	&*Xv7J"K"K 	&%N(3 	F'+$ $ 	P(0(A(G(M(M(O(OH%$ G	S" " " " " ""#'::h.G.M#N#N  '   wW_Wpwwtuww  @D  E  E  E  E   0S% wiquvvvv**+X+X+XYYY*S*A*ABR*S*S'* Q7;<O7P7P4!p!p!pJ!q!q!qJ!+J=P=V=V=X=X M M9*.%7 1.; 0 )%aiaz % %@N% %m|% % +/	!0 !0 !0 !0
 /1O%7 2.; 0 )%aiaz % %@N% %m|% % +/	!0 !0 !0 !0
 /2O
NOLLLL%)z%:%:%:N $I%04[[[$%	%3%: X XE%)B)B5)I)I)O)O'7 *P *X *X XIIX "  #EX5O  #E  #E  #E  MQ  R  R  R  R  Glu  G  G  G  H  H  H  H  H" S S S QaQQRRRRRRRRRSIG	S G	S.0S 0Ss1   .$B C"B??C5EH8 8
IIIc                 0    |                      |            d S N)r   rM   s    r   _calc_filter_optionsz!CmfCustField._calc_filter_options   s    !!$'''''r   c                 R    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EEww**,,v55r   c                     t          t                              | j        j                  j                                                  dk    rt          dd           d S d S )Ni@  u2   Превышен лимит в 1600 колонокTr   )rc   r   r   r   r?   rT   keysrF   rM   s    r   _check_limitzCmfCustField._check_limit   s]    w(()<)BCCJOOQQRRTXXXJRVWWWWWW YXr   c                 8   | j         s;| j        j        rt          dd           | j        j        rt          dd           n|                                  |                                  |                                  |                                  | j        	                    d          st          dd           | j
        s3h d}t          |                     d                    }||z  rd| _
        | j        rDt          | j        j        t                     r	d	| j        vrt          d
| j         dd           d S  t#                      j        |i |}| j
        r6t'          t(                    | 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   s   { 	 y# Cu  ~B  C  C  C  C) pbjnoooo$$&&&##%%%!!###y##E** 	qy}~~~~z 	"c c cO !d!;!;<<N/ "!
< 	DL,>!E!E 	X\XdIdId  z~  {G        GK  L  L  L  LFegglD+F++: 	HLL,23EEGGG
r   c                 b    |                                    t                      j        |i |}|S r   )rO   r   _save_import)rN   r   r   r   r   s       r   r   zCmfCustField._save_import   s5    $$&&&"egg"D3F33
r   F)TEXKOM_db_deletec                   t           j                            | |          D ]} |j        |d|i| d| _         t                      j        |d|i| t          t                     | j        j                 	                                 d S )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;;t]m;nn 	R 	RJJtQ6FQ&QQQQ
J/?J6JJJVT(./AACCCCCr   c                 ~   t          | j        j                  }| j        j        |d<   | j        j        |d<   |d                             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  s   111 L.y#4|,((// 	&z &"&w!%v 	;$($4$:F=!< 	3 $ 2F9 L1y L.y!06z%)%:!"}$ 	5!%!4F:{" 	1#{0F8z! 	/"j.F7O|# 	3 $ 2F9$, 	E)-)>)DF%&'/ 	K,0,D,JF()-5 	W262P2VF.//7 	[484T4ZF01{" 	1#{0F8r   r   )r   r   r	   rO   rW   staticmethodr   r   r   r   r   r   r   r   __classcell__)r   s   @r   r   r      s       Z' Z' Z'x
P 
P 
P [S [S [S \[Sz( ( (6 6 6 6 6X X X    :    
 .3 D D D D D D D% % % % % % %r   r   )	collectionsr   cmf.includecmf.fields.cmf_cust_fieldrS   r   rT   cmf_cust_fieldr   r   r   r   <module>r      s    # # # # # #                   ` ` ` ` `3:,9 ` ` ` ` `r   