
    *.+h
1                     f    d dl m Z  d dlT d dlZ G d dej        j        j        j                  ZdS )    )copy)*Nc                   2    e Zd ZdZej        j        j        j        j	        ddgz   Z	 fdZ
 fdZ fdZed fd	            Zed fd		            Zd
 Zd Zd Zd Zd Zd fd	Zd Zd Zedd            Zedd            Zedd dd            Z xZS )CmfAssetTui_getui_get_create_formc                 t   |                                   |                                  |                                  |                                  | j        j        rt          dd           | j        st          dd           | j        st          dd            t                      j
        |i | d S )NuQ   Нельзя добавить объект в абстрактную группуTabortu#   Не заполнена схема!u   Не заполнено имя!)	_calc_cat_calc_parent_calc_logic_type_calc_workflow	asset_catis_abstract	cmf_alertparentnamesupersaveselfargskwargs	__class__s      #./modules/asset/models/cmf_asset.pyr   zCmfAsset.save   s    >% 	xjrvwwww{ 	I;4HHHHy 	E7tDDDDd%f%%%%%    c                 b    |                                    t                      j        |i | d S N)r   r   _save_importr   s      r   r    zCmfAsset._save_import   s7    d-f-----r   c                 N    t                                                      g dz   S )N)zparent.*r   zasset_cat.parentzasset_cat.default_logic_typezasset_cat.is_abstract)r   save_preload_fields)r   r   s    r   r"   zCmfAsset.save_preload_fields"   s/    ww**,, 0
 0
 0
 
 	
r   Nc                    t                                          |          }|sddg}|t          j                            g |d          z  }|t          j                            g |d          z  }|t          j                            g |          z  }|t          j                            g |ddddd	d
          z  }|S )Nr   ext_idasset_code_prefixdefault_logic_typemodel_idbar_codeproduct_information
unit_priceversion
short_name)r   import_shop_fieldsmodelsCmfAssetSchemeCmfAssetCatCmfAssetTypeCatCmfAssetType)clsfields_namerescommon_fieldsr   s       r   r-   zCmfAsset.import_shop_fields'   s8   gg((55  	M 6(;;"'  C 6%88"(  C 6)<<"  C
 6&99"  *	
 !  !
 
 
C 
r   c                    |dk    r#|o|                     dd           }|sg }|dd|gg}|dk    r|sg }d }|r1|                     di           }|r|                     dd           }ng S |r5t          j                             |dg          }|j        r|dd	|j        gg}|o|                     dd           }|r|dd
|gg} t	                      j        |f|||d|S )Nr   	parent_idz==asset_typesidasset_types_catr:   fieldsasset_type_catIN=)filtermodels_listobject_fields)getr.   r0   r;   r   field_options_list)
r3   relation_field_namerA   rB   rC   r   r8   asset_cat_idr   r   s
            r   rE   zCmfAsset.field_options_listM   s_   +--%N-*;*;K*N*NI {D)<=F-// L )--k2>>	 #,==t#<#<LL I [".22lL]K^2__	, [$'7y?X&YZF%N-*;*;K*N*NI A ;Y"?@)uww)*= QfZe8EQ QIOQ Q 	Qr   c                     | j         s_t          j                            dgg dg dg          | _         | j         s-t          j                            dgg d          | _         d S d S d S )Nr   )systemr@   T)r   r@   u   Оборудование)r=   rA   )r   r.   r0   rD   r   s    r   r   zCmfAsset._calc_catk   s    ~ 	V#/33H:<Q<Q<QS|S|S|;} 4  DN> V!'!3!7!7z?T?T?T "8 "V "V	V 	VV Vr   c                     | j         s|                                  | j        s.| j                            dg           | j         j        | _        d S d S )Nr   )r   r   r   r>   load_fieldsrJ   s    r   r   zCmfAsset._calc_parentt   sY    ~ 	NN{ 	0++XJ777./DKKK	0 	0r   c                 :    | j         sd S | j        j        | _        d S r   )is_newr   r&   
logic_typerJ   s    r   r   zCmfAsset._calc_logic_type{   s#    K	 F.;r   c                 b    | j         s't          j                            d          | _         d S d S )Nzasset.system:default)code)workflowr.   CmfWorkflowrD   rJ   s    r   r   zCmfAsset._calc_workflow   s9    } 	P".228N2OODMMM	P 	Pr   c                     | j         s|                                  | j         j                                         | j         j        j        S r   )r   r   r%   loadvaluerJ   s    r   get_code_prefixzCmfAsset.get_code_prefix   sC    { 	 %**,,,{,22r   Fc                    | j         r| j        j        s|sd S | j         s"t                                                       d S |r|                                 }| j         j                            | d          r6| j         j                            d          |                    d          k    r.d| j	        _        t                                                       d S | j        j        r]| j         j                            |                                  d          s+d | _         t                                                       d S d S d S )N-T)
rQ   r   
is_changedr   
_calc_coderW   rV   
startswithcountrO   )r   from_recalculate
new_prefixr   s      r   r[   zCmfAsset._calc_code   sO   		{%	  	
 Fy 	GG   F 	--//J9?--.>.>.>?? 49?CXCXY\C]C]akaqaqruavavCvCv-1*""$$$;! 	$)/*D*DH\H\H^H^EaEaEa*b*b 	DIGG   F	 	 	 	r   c                     d}|                      g ddd| j        gdd| j        ggdgd	          }|r-t          |j                            d
          d                   }|S )N)rQ   z
SIMILAR TOz
%-[0-9]+\Zr   r@   r:   z!=z-cmf_created_atT)rA   order_byinclude_deletedrY   )sgetr8   r:   intrQ   split)r   
max_numberlasts      r    _get_current_code_number_from_dbz)CmfAsset._get_current_code_number_from_db   s    
yy!E!E!ERUW[WeGfimosuyu|h} ~#4"5)-  / /  	7TY__S11"566Jr   c                 (   t           j        }d}| j        r| j        j        }d| j         d| }| j         d| d}|j                            |d          }|                                 	 |                    |          r|	                    |          }n-| 
                                dz   }|                    ||           	 |                                 n# t
          j        j        $ r7}t                              d| d	|j         d
|j                    Y d }~npd }~ww xY w# 	 |                                 w # t
          j        j        $ r7}t                              d| d	|j         d
|j                    Y d }~w d }~ww xY wxY w| S )NNOASSETznext_code_number-rY   z.lock   )timeout   zlock release error z, lock_name z
, timeout )APPREDIS_DBr8   rV   
class_nameredislockacquireexistsincrri   setrelease
exceptions	LockErrorgdebugr   rm   )r   redis_dbsuffixkeylock_keyrs   next_code_numberes           r   r   zCmfAsset.next_code_number   s   <> 	*^)F<$/<<F<<o55555~""8R"88
	bs## 4#+==#5#5  #'#H#H#J#JQ#N S"2333b#- b b b`a``TY``RVR^``aaaaaaaabb#- b b b`a``TY``RVR^``aaaaaaaab #$$sO   -AD) C D&/-D!!D&)F+E ?F F-FFFFc                    d }d }d } ||          }t                      }g }|}|r|j        |v rt          d| d           |                    |j                    ||          s||k    r#|                     ||          j                   t
                              |j                                      |j	        g dd          }||
                                 d	d
d|j        dk    rdndg}	t          j                            | ||          d|	          \  }
}t          |j        |j        |j        |
|          }|S )Nc                      | j         dk    rdndS )Nr0   r   r2   )rq   )	category_s    r   get_model_namez5CmfAsset._build_asset_ui_form.<locals>.get_model_name   s    !*!5!F!F::NZr   c                 L    | j         dk    rdnd}t          | |          d         S )Nr0   asset_ui_formasset_type_ui_formr   rq   getattrr   	attr_names     r   get_category_formz8CmfAsset._build_asset_ui_form.<locals>.get_category_form   s.    +4+?=+P+PVjI9i0033r   c                 @    | j         dk    rdnd}t          | |          S )Nr0   asset_ui_form_children_inherit#asset_type_ui_form_children_inheritr   r   s     r   is_category_form_inheritz?CmfAsset._build_asset_ui_form.<locals>.is_category_form_inherit   s/    <E<PTa<a<a88: 9i000r   uE   Обнаружен цикл в структуре категорий Tr
   )tree_parent_idr   r   r   r   )r:   r=   cache_inmemoryr   rO   rQ   r0   r   r>   _main)
model_namerequired_grouprequired_fields)r   rQ   _id	ui_fieldsui_group_fields)rw   r:   r   addappendcmfutilget_model_by_namerq   rd   r   reverser.   	CmfUiFormget_ui_fields_inheriteddictr   rQ   )r3   categoryr   r   r   ui_formcategory_setui_form_listcurr_categoryr   r   r   ui_form_jsons                r   _build_asset_ui_formzCmfAsset._build_asset_ui_form   s   	[ 	[ 	[	4 	4 	4
	1 	1 	1
 $#H--uu   	Q<//pbnppx|}}}}]-...''66 I-8:S:S##$5$5m$D$D$GHHH#55h6IJJOO /; ; ;KO	 P Q QM  	Q 	L&#.-??KKEUW &,%5%M%M^^H%=%=ggv &N &x &x"	? 
+
 
 
 r   c                     |                     d          r$t          j                            |g d          }n#t          j                            |g d          }|                     |          }|S )u:  
        Что-то вроде ui_get, но только для формы создания
        Метод нужен потому, что при создании самого актива еще не существует, и мы получаем его форму у категории актива
        zCmfAssetCat:)r   r   r   r<   )r   r   r   r   )r\   r.   r0   rd   r1   r   )r3   r   _kwargstmp_objr   s        r   r   zCmfAsset.ui_get_create_form   s     $$^44 	h(--!\\\ . ^ ^GG ,11!fff 2 h hG ///AAr   )r=   r   c                   |sg }|dk    rd}d}d}nd}d}d}t                               |          }| d| d	| | d	| g}	 |j        |d
|	i|}
t          |
|          }|                     |          }t          |          }|d         D ]}|                    |d
                     |j        |d
t          |          i|}|r!||_        |d         |_	        |d         |_
        |S )ux   
        fields - список мета-правил для указания какие поля грузить
        r   r   r   r   r>   r   r   z.tree_parent_id.r=   r   r   r   rQ   )r   r   rd   r   r   rw   updatelistr   ui_form_nameui_form_code)r3   r=   r   r   r   cat_field_nameuiform_field_namechildren_inherit_field_nameasset_model
tmp_fieldsr   r   r   
ext_fieldsgrouprets                   r   r   zCmfAsset.ui_get  s^   
  	F##(N /*J''-N 4*O'//
;; ...33 133== ;==

 #+"DFFvFF7N33///BB[[
!"34 	/ 	/EeHo....kHT*-=-=HHH 	4+C+F3C+F3C
r   r   )NNN)F)__name__
__module____qualname__	api_allowmodulesassetr=   	cmf_assetr   api_methodsr   r    r"   classmethodr-   rE   r   r   r   r   rW   r[   ri   r   r   r   r   __classcell__)r   s   @r   r   r      s       I-&09EI K
& & & & & . . . . .
 
 
 
 

 # # # # # [#J Q Q Q Q Q [Q:V V V0 0 0< < <P P P3 3 3     2  % % %4 1 1 1 [1f    [" "&: & & & & [& & & & &r   r   )r   cmf.includemodules.asset.fields.cmf_assetr   r   r=   r   r    r   r   <module>r      sx              % % % %p p p p pw}#-6 p p p p pr   