
    qAh,4                     X    d dl mZ d dl d dlZd dlmZ  G d dej                        Zy)    )Dict)*N)cmf_ui_formc                        e Zd Zej                  j
                  dgz   Zd Ze ed      d               Z	ede
defd       Zede
defd	       Zedd
       Z fdZ fdZd fd	Zd Zdd fd
Z xZS )	CmfUiFormcopyc                 L    d| j                   j                  i}t        d|       y)uK   
        Сбрасываем кеш настройки полей
        
ui_form_idCmfUiForm:changedN)idvaluecmf_emit_server_event)selfdatas     (./modules/settings/models/cmf_ui_form.pyinvalidate_cachezCmfUiForm.invalidate_cache   s!     dggmm,148    r   )channelc                 X    | d   t         j                  v rt         j                  | d   = y y )Nr
   )APPcache_cust_field_config_scheme)r   _kwargss     r   on_ui_form_changezCmfUiForm.on_ui_form_change   s0     !C!CC2243EF Dr   r
   returnc                     i }t         j                  j                  | dg      D ]   }|j                  sddi||j                  <   " |S )u   Список полей с точечными настройками

        Args:
            ui_form_id (str): ид экрана

        Returns:
            dict: Словарь настроенный полей

        r   parentfieldsrequired_changeT)modelsCmfUiFormFieldslistr   name)r
   argskwargsresultui_form_fields        r   ui_fields_jsonzCmfUiForm.ui_fields_json   sY     #2288
TWSX8Y 	FM,,->,E}))*	F r   c                 j   t               }g ddd| gg dg}t        j                  j                  |dg      D ]_  }t        |j                  |j
                  |j                  g g g |j                  |j                  |j                  	      ||j
                  <   a t        j                  j                  | ddg	      D ]<  }|j                  j                  r|j                  j                  r2|j                  j
                  |vrt        |j                  j                  |j                  j
                  |j                  j                  g g g |j                  j                  |j                  j                  |j                  j                  	      }|||j                  j
                  <   |j                  j                  r%|j                  |j                  j                         |j                  d
k(  rKd|j                  d
    d|j                   }||j                  j
                     d   j                  |       n5||j                  j
                     d   j                  |j                         |j                  r5||j                  j
                     d   j                  |j                         |j                   s||j                  j
                     d   j                  |j                         ? |j#                         D cg c]  }| }	}|	j%                  d        |	S c c}w )u   Группы и поля как должны отображаться на форме

        Args:
            ui_form_id (str): ид экрана

        Returns:
            list: Список групп на форме с полями
        )action==clickr   r+   )hiddenr+   Fr   )filterr   )	r*   r   r#   r   hidden_fieldshide_empty_fieldsparamsordernotypezui_form_group.*r   linkzlink::r   r/   r0   c                     | d   S )Nr2    )xs    r   <lambda>z/CmfUiForm.get_ui_group_fields.<locals>.<lambda>c   s
    q| r   )key)dictr    CmfUiFormGroupr"   r*   r   r#   r1   r2   r3   r!   ui_form_groupr-   cmf_deletedupdateappend
hide_emptyvaluessort)
r
   r$   r%   	ui_groups_filterr=   r'   ui_groupr4   ress
             r   get_ui_group_fieldszCmfUiForm.get_ui_group_fields+   s    F	,hj-IKbc#2288QTPU8V 	M*.$++ ##"'' "$$++%--"''
+Im&&'	 $2288
TWYjSk8l 	jM**11**66**--Y>(66==$2255&4499"$&((66==)77??&4499
 =E	-55889 ..55OOM$?$?$F$FG!!V+}33F;<Am>P>P=QR-55889(CJJ4P-55889(CJJ=K]K]^##-55889/JQQR_RdRde''-55889:MNUUVcVhVhi=	j> )2(8(8(:;Hx;;+,
 <s   	L0c                     i i t                fd}|r't        ddd|di t               t               g 	      |<   |D ]	   |         |r]|r[|   }g }|D ]B  }||d   vr|j                  |       |d   j                  |       |d	   j                  |       D |r||d   z   |d<   t	        j                               }	|	D ]$  }
t	        |
d         |
d<   t	        |
d	         |
d	<   & |ryD ]t  }|j                  d
      st        j                  |      j                  |   j                  j                         }|j                  j                  |i              ||<   v |	fS )u+  
        Возвращаем ui_fields и ui_group_fields для ui_form_json.
        На основе списка форм с логикой наследования.
        Первая форма самая общая(базовая), последняя - самая частная.
        c                     j                        } | D ]  }|d   
vr$t        t               t               g       
|d   <   
|d      }|j                         D ]]  \  }}|dv r||   j	                  |       |dk(  r5|D ]/  }j                  |       |||   vs||   j                  |       1 Y|||<   _  j                        j                         D ]"  \  }}|	vri 	|<   	|   j	                  |       $ y )Nr#   )r/   r0   r   )r/   r0   r   )rH   r;   setitemsr?   addr@   r(   )ui_form_group_fields
form_groupgroupkv
field_name
field_meta
all_fieldsclsr   group_fields_dictr
   s          r   append_ui_form_fieldsz@CmfUiForm.get_ui_fields_inherited.<locals>.append_ui_form_fieldss   s0   #&#:#::#F 2 %
f%->><@&)esuR=Q%j&89)*V*<=&,,. %DAqBB a*h*+ <J&NN:6)q9 %a
 ;< $%a%%, +.*<*<Z*H*N*N*P 6&
JV+)+F:&z"))*56r   rP   expandNr   )	r3   r*   r   r#   r2   r1   r/   r0   r   r   r/   r0   cf_)rK   r;   r@   discardlistrB   
startswithcmfutilget_model_by_namer   ui_metar   r?   get)rV   ui_form_list
model_namerequired_grouprequired_fieldsrX   required_group_dict
add_fieldsrS   group_fieldsrP   rT   rU   r   rW   r
   s   `           @@@@r   get_ui_fields_inheritedz!CmfUiForm.get_ui_fields_inheritedf   s     .0U
	6 	6< 04X$^UV^`!esuR1In-
 ' 	$J!#	$ o"3N"CJ- M
%8%BB%%j1#O4<<ZH#$78@@L	M
 0:=PQY=Z0Z#H- -4467! 	JE%)%*@%AE/")-e4G.H)IE%&	J
 ( 0
!,,U3$66zBII*U]]bbd
!!&**Z"<=%/z"0 |##r   c                     t        |   |i |}| j                  rM| j                  sA| j                  dk(  r2t
        j                  j                  d      }|j                  |        |S )NCmfTaskzui_form.task:default)code)obj_copy)	supersaveis_newsystemcmf_model_namer    r   ra   r   )r   r$   r%   rG   ui_form	__class__s        r   ro   zCmfUiForm.save   s^    glD+F+;;t{{""i/ **..4J.Kd+
r   c                 "    t        |   |i |S )N)rn   _save_import)r   r$   r%   rt   s      r   rv   zCmfUiForm._save_import   s    w#T4V44r   c                     |s"|sd| j                    }t        |   |d|i|}t        j                  j                  | dg      D ]  }|j                  ||j                          ! |S )u   
        Копируем экран с настройкой полей

        Args:
            name (строка): имя нового экрана
        u   Копия r#   r   r   )r   r#   )r#   rn   r   r    r<   r\   )r   r#   rm   r$   r%   grprt   s         r   r   zCmfUiForm.copy   ss     $TYYK0w|???H((--T8*-M 	5CHHH388H4	5r   c           	      @   t         j                  j                  g ddd| j                  gg      }g }|D ]  }|j                  }t        t         |      }g }d }|j                  r7|j                  D cg c]  }|j                   }}|j                  dd|g       d }	|j                  r*|j                  j                  }	|j                  dd|	g       |j                  |      }
|j                  ||j                  ||	|
d	        d
dd| gdd| gdd| gg}t         j                  j                  |      }
|
r|j                  dd g d |
d	       d
dd| gdd| gdd| gg}t         j                  j                  |      }
|
r|j                  dd g d |
d	       |S c c}w )N)rr   crud_choicelogic_typesactivitytarget=)r   r.   
logic_typeINr|   )r.   )modelrz   r{   r|   countORzrequest_type.ui_form_creater+   zrequest_type.ui_form_viewzrequest_type.ui_form_view_innerrk   ui_form_createui_form_viewui_form_view_innerCmfSDeskRequestType)r    CmfUiFormSchemeRuler"   r   rr   getattrr{   r@   r|   r   rz   rk   r   )r   rulesr&   rulerc   r   filterslogic_type_idsltactivity_idr   rE   s               r   usage_statszCmfUiForm.usage_stats   s   **00OsDGG,- 1 
  	D,,JFJ/EG "N262B2B!CB"%%!C!CdNCD K}}"mm..
C=>KKwK/EMM##//-' )	8 6dC0t<6tTBD nn""'"2MM&#'#% $"  )46#D$/)$57 ((..g.>MM2#'#% $"  Y "Ds   3FF)TEXKOM_db_deletec                ~   d}| j                         D ]
  }||d   z  } |rt        d| dd       t        j                  j	                  dd| g|	      D ]  } |j
                  |d
|i|  t        j                  j	                  dd| g|	      D ]  } |j
                  |d
|i|  t        |   |d
|i|S )Nr   r   u}   Невозможно удалить используемый экран. Данный экран используется в u    объектахT)abortr   r+   )r.   include_deletedr   )r   	cmf_alertr    r!   r\   deleter<   rn   )	r   r   r$   r%   usage_countusagefieldrP   rt   s	           r   r   zCmfUiForm.delete  s   %%' 	*E5>)K	*  V  Wb  Vc  ct  u "**//$7M_o/p 	MEELL$L1ALVL	M**//$7M_o/p 	MEELL$L1ALVL	Mw~tQ6FQ&QQr   )NNN)NN)__name__
__module____qualname__r   r   api_methodsr   staticmethodon_server_eventr   strr;   r(   r\   rH   classmethodri   ro   rv   r   r   r   __classcell__)rt   s   @r   r   r      s    ''337
 
K9 01G 2 G 3 D    8 8 8 8t O$ O$b5<| .3 R Rr   r   )typingr   cmf.includecommon.fields.cmf_workflowcommonmodules.settings.fieldsr   r   r7   r   r   <module>r      s'      ! /TR%% TRr   