
    *j]                         d dl mZ d dlZd dl d dlZ G d d      Z G d dej                  j                  j                        Z	y)    )defaultdictN)*c                       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                        e Zd Zd Zd Zedd       Zd Z fdZd Z	d Z
 fdZdd	Z fd
Zdd fd
Zed        Zed        Ze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CmfSelectExtCUSTOM_CHOICE_MODEL_EXTchoice_multi_ext	CmfM2MExtCmfMultiSelectExt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_indexrN   varscmffieldsrQ   r?   
issubclassr   rP   )rX   	field_clss     r   _calc_fullsearch_indexz#CmfCustField._calc_fullsearch_indexw   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)bqlrf   rg   icur_operpartsrecursive_params_searchs         r   ru   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   Данное поле не поддерживает фильтрацию)rQ   rU   rM   >   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    не поддерживает фильтрациюrJ   uK   Фильтр корректный. Результат фильтрации u    записейu-   Ошибка проверки фильтра )NN)rj   rU   r   options_list_bqlrN   options_list_paramsr?   stripjsonloadsJSONDecodeErrorrP   load_fieldsrk   r   itemssetattrdictrQ   cmfutilget_model_by_namecountrM   CmfOrmError)conf_objcust_field_objr   er   
list_opers
like_opers
obj_fieldsctx_field_namefilter_oper_setctx_field_valuer   	obj_countrS   ru   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   rW   s    r   _calc_filter_optionsz!CmfCustField._calc_filter_options   s    !!$'r   c                 .    g d}t         |          |z   S )N)dirtyrV   cmf_model_namerQ   rM   is_ext_datasourcecustom_table_no)supersave_preload_fields)rX   r^   	__class__s     r   r   z CmfCustField.save_preload_fields   s     Cw*,v55r   c                 j   	 t         j                  | j                  j                        }|$t        d| j                  j                   d       t        |dd      }t        |dd      }t        j                  j                  | j                  j                  ddg	      }|D ci c]  }|d   |d
    }}d}t        d|dz         D ])  }|dk(  r|n|}	|j                  |d      |	k  s"|| _         y t        d| d| j                  j                   dd       y# t        $ r d}Y w xY wc c}w )u_   Автовычисление номера extension-таблицы для нового поляNu%   Неизвестная модель: Tr   custom_fields_base_maxi  custom_fields_maxr   )r   include_deletedgroup_byr   d   r   re   u4   Превышен лимит extension-таблиц (u   ) для модели u7   . Обратитесь к администратору.)r   r   r   r?   KeyErrorrP   getattrrU   r   r   rl   getr   )
rX   target_modelbase_maxext_maxcounts_listrowcountsMAX_EXT_TABLESext_nolimits
             r   _calc_custom_table_noz"CmfCustField._calc_custom_table_no   se   	 "44T5H5H5N5NOL =d>Q>Q>W>W=XYaef<)A3G,(;SA ))//..44 '( 0 

 CNN3#'(#g,6NN A~12 	F &!HEzz&!$u,'-$		 	B>BRRh""(())`b	

 	A  	 L	   Os   )D &D0D-,D-c                 F   | j                   dv r| j                  rd| _        | j                  j                  r1| j                  r%t        d| j                  j                   dd       | j                  j                  r3| j                  s&t        d| j                  j                   dd       y y y | j                   dv r=| j                  j                  r&t        d| j                  j                   dd       y y | j                   dv r| j                  r^| j                  j                  rH| j                  s<t        d	| j                  j                   d
| j                  j                   dd       | j                  j                  r| j                  rd| _        y y y y )N)rG   rC   Tub   Для данного типа поля нельзя устанавливать свойство ""r   uX   Для данного типа поля нельзя изменять свойство ")r   r   r(   r*   )r   r   r   r   r    r"   r$   r&   datar0   r=   uV   Для данного типа поля нелья изменить свойство "u4   " если установлено свойство ")rM   rO   r   field_readonlyrN   rP   captionrW   s    r   _check_ext_fieldzCmfCustField._check_ext_field  s   !!%GG{{)-&""--$2E2E  !C  DH  DW  DW  D_  D_  C`  `a  b  jn  o%%009O9Otuy  vL  vL  vT  vT  uU  UV  W  _c  d :P0##'kk%%00tuy  vL  vL  vT  vT  uU  UV  W  _c  d 1 ##  (I  I%%$*=*=*H*HQUQdQdlmq  nA  nA  nI  nI  mJ JIIMI_I_IgIgHhhikrvx %%00T5K5K&*# 6L0 Ir   c                    | j                   sj| j                  j                  rt        dd       | 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                  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 t1        | d  |i |}| j"                  r4t5        t              | j6                  j,                     j9                          | j:                  j                  rR| j:                  rFt        j<                  j?                  |       }|s$t        j=                  |       j3                          |S )NuY   Нельзя менять системное имя поля, создайте новоеTr   uF   Нельзя менять тип поля, создайте новоеuh   Нельзя менять номер extension-таблицы для существующего поляrJ   zsystem.link)codecf_uY   Системное имя должно обязательно начинаться с cf_>   namer   choicescommentrV   visiblereadonlyrequiredrQ   placeholderdisabled_choicesr[   allow_multichoicer   filter_cur_projectr   options_list_show_columnsoptions_list_search_columns)rN   r?   ua   Не правильный формат хранения значения по умолчанию u6   , используйте пример dict(value=None)parent) rO   r   rN   rP   rQ   r   r   rM   task_relation_typerU   CmfRelationTyper   rY   ra   r   r   rn   r   ri   keysrV   rj   r?   r   r   saver\   r   custom_field_syncr   CmfDatasourceFieldQuerysget)rX   argskwargscritical_fieldschanged_fieldsresdsr   s          r   r   zCmfCustField.save&  s    {{yy##u  ~B  C))bjno##..  E  MQ  R &&(%%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!!,,1G1G//44D4AB..d.;@@B
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_appendedrU   CmfRelationOptionr   r   task_remove_relationchanges_removeddelete)rX   field_relation_kwargstaskrelations        r   calc_tasks_fieldzCmfCustField.calc_tasks_fieldU  s    ^^11

 $$..  ++//  & ((  & $& $$-- &!3377  &
 OO%& %r   c                 ~    | j                   r| j                          | j                          t        |   |i |}|S r   )rO   r   rY   r   _save_import)rX   r   r   r   r   s       r   r   zCmfCustField._save_importt  s;    ;;&&($$&g"D3F3
r   F)TEXKOM_db_deletec                   | j                  dg       | j                  r6t        j                  j	                  |       }|r |j
                  |d|i| t        j                  j                  | |      D ]  } |j
                  |d|i|  d| _        |s#t        j                  j                         | _        t        |   |d|i| t        t              | j                  j                     j!                          y )Nr   r   r   )
cust_fieldr   T)r   r   rU   r   r   r   CmfCustFieldConfFieldrk   r   r0   nowcmf_modified_atr   r\   r   r?   r   )rX   r   r   r   r   
conf_fieldr   s         r   r   zCmfCustField.delete|  s    -./!! //3343@B		4M2BMfM 66;;t]m;n 	RJJtQ6FQ&Q	R
#+#4#4#8#8#:D J/?J6JVT((../AACr   c                     t        | d|       S )us   Достать значение из полноценного field-wrapper или тонкой slist-строки.r?   )r   )	raw_values    r   _meta_valuezCmfCustField._meta_value  s     y'955r   c                 L    t        |dd      }|| S | j                  |      duS )up   Проверить, что поле было заполнено, без привязки к типу wrapper-а.is_nullN)r   r   )clsr   r   s      r   _meta_has_valuezCmfCustField._meta_has_value  s4     )Y5;y)55r   c                 j    | j                  |      }t        |t              r|j                  d      S dS )uU   Вернуть default['value'] из CmfJson wrapper-а или raw dict из slist().r?   N)r   rj   r   r   )r  raw_defaultdefault_values      r   _meta_default_valuez CmfCustField._meta_default_value  s2     4-7t-L}  )VRVVr   c                    t        | j                  | j                              }| j                  | j                        |d<   | j                  | j                        |d<   |d   j                  d      s|d   j                  d      r&| j                  | j                        rd|d<   nd|d<   | j                  | j                        r| j                  | j                        |d	<   | j                  | j                        r| j                  | j                        |d
<   | j                  | j                        |d<   | j                  | j                        |d<   | j                  | j                        |d<   | j                  | j                        |d<   | j                  | j                        r| j                  | j                        |d<   | j                  | j                         r| j                  | j                         |d<   | j                  | j"                        r| j                  | j"                        |d<   | j                  | j$                        r| j                  | j$                        |d<   | j                  | j&                        r| j                  | j&                        |d<   | j                  | j(                        r| j                  | j(                        |d<   | j                  | j*                        r| j                  | j*                        |d<   | j                  | j,                        r| j                  | j,                        |d<   | j                  | j.                        r| j                  | j.                        |d<   | j                  | j0                        dk(  r<| j                  | j2                        |d<   | j                  | j4                        |d<   | j                  | j6                        rdg|d<   | j                  | j6                        |d<   | j                  | j8                        xs d|d<   |S )N)
class_namer   rQ   M2MM2MExtTrightrR   r   r   rV   r   r   r[   r   rU   rS   r   r   r   r   r   rT   rJ   r   r   idr   r   r   )r   r   r   r   rQ   endswithr  r   r   r  rV   r   r   r[   r  r   rU   rS   r   r   r   r   r   rT   rM   r   r   r   r   )rX   results     r   get_metazCmfCustField.get_meta  s   !1!1$))!<= ,,T\\:y#//@|,((/6,3G3P3PQY3Z

+"&w!%vD,,-$($4$4T5E5E$FF=!DLL) $ 0 0 >F9 44T\\By ,,T\\:y!--d.A.ABz%)%5%5d6K6K%L!".!%!1!1$--!@F:,#//<F8

+"..tzz:F7O- $ 0 0 >F9 5 56)-)9)9$:O:O)PF%& 8 89,0,<,<T=U=U,VF() > >?262B2B4CaCa2bF./ @ @A484D4DTEeEe4fF01,#//<F8D223w>*.*:*:4;Q;Q*RF&'+/+;+;D<S<S+TF'(D223-1FF()&*&6&6t7M7M&N"#$($4$4T5I5I$J$Oa !r   r   )r   zcmf.fields.Field)r   r   r	   rY   ra   staticmethodr   r   r   r   r   r   r   r   r   r   classmethodr  r  r  __classcell__)r   s   @r   r   r      s    h&T
P \S \S|(6$L+.-^&> .3 D" 6 6 6 6 W W
.r   r   )
collectionsr   r0   cmf.includecmf.fields.cmf_cust_fieldr]   r   r^   cmf_cust_fieldr   r   r   r   <module>r     s9    #     B3::,,99 Br   