
    oi21                         d dl m Z  d dl d dlZ G d dej                  j
                  j                  j                        Zy)    )copy)*Nc                   F    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                 N   | j                          | j                          | j                          | j                          | j                  j
                  rt        dd       | j                  st        dd       | j                  st        dd       t        | (  |i | y )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    >>%%irvw{{;4Hyy7tDd%f%    c                 D    | j                          t        |   |i | y N)r   r   _save_importr   s      r   r    zCmfAsset._save_import   s!    d-f-r   c                 *    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    w*, 0
 
 	
r   Nc                 r   t         |   |      }|sddg}|t        j                  j                  g |d      z  }|t        j                  j                  g |d      z  }|t        j
                  j                  g |      z  }|t        j                  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'   s#   g(5M 6((;;"' C 6%%88"( C 6))<<" C
 6&&99"  *	
 !  !
 
C 
r   c                 ~   |dk(  r!|xr |j                  dd       }|sg }|dd|gg}|dk(  r~|sg }d }|r|j                  dd       }|sg S |r?t        j                  j                  |dg      }|j                  r|dd|j                  gg}|xr |j                  dd       }|r|dd	|gg}t	        	|   |f|||d
|S )Nr   	parent_idz==asset_typesasset_types_catid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*NI{D)<=F-/L,00dC#I"..22lL]K^2_	,,$'7y?X?X&YZF%N-*;*;K*NI ;Y"?@w)*= QfZe8EQIOQ 	Qr   c                     | j                   sdt        j                  j                  dgg dg dg      | _         | j                   s*t        j                  j                  dgg d      | _         y y y )Nr   )systemr@   T)r   r@   u   Оборудование)r=   rA   )r   r.   r0   rD   r   s    r   r   zCmfAsset._calc_cati   sj    ~~#//33H:<QS|;} 4 DN>>!'!3!3!7!7z?T "8 "V " r   c                     | j                   s| j                          | j                  s8| j                   j                  dg       | j                   j                  | _        y y )Nr   )r   r   r   load_fieldsrJ   s    r   r   zCmfAsset._calc_parentr   sD    ~~NN{{NN&&z2..//DK r   c                 T    | j                   sy | j                  j                  | _        y r   )is_newr   r&   
logic_typerJ   s    r   r   zCmfAsset._calc_logic_typey   s    KK..;;r   c                 n    | j                   s)t        j                  j                  dddg      | _         y y )Nzasset.system:defaultTsave_eval_code)codecache_inmemoryr=   )workflowr.   CmfWorkflowrD   rJ   s    r   r   zCmfAsset._calc_workflow   s3    }}"..228N_cm}l~2DM r   c                     | j                   s| j                          | j                   j                  j                          | j                   j                  j                  S r   )r   r   r%   loadvaluerJ   s    r   get_code_prefixzCmfAsset.get_code_prefix   sA    {{%%**,{{,,222r   c                 n   | j                   r| j                  j                  s|sy | j                   st        |           y |r| j                         }| j                   j                  j                  | d      r7| j                   j                  j                  d      |j                  d      k7  r d| j                  _        t        |           y | j                  j                  rM| j                   j                  j                  | j                          d      sd | _         t        |           y y y )N-T)
rR   r   
is_changedr   
_calc_coderY   rX   
startswithcountrO   )r   from_recalculate
new_prefixr   s      r   r]   zCmfAsset._calc_code   s    		{{%%yyG --/J99??--A.>?499??CXCXY\C]akaqaqruavCv-1*"$;;!!$))//*D*DH\H\H^G__`Ea*bDIG  +c!r   c                     d}| j                  g ddd| j                  gdd| j                  ggdgd	      }|r't        |j                  j                  d
      d         }|S )N)rR   z
SIMILAR TOz
%-[0-9]+\Zr   r@   r<   z!=z-cmf_created_atT)rA   order_byinclude_deletedr[   )sgetr8   r<   intrR   split)r   
max_numberlasts      r    _get_current_code_number_from_dbz)CmfAsset._get_current_code_number_from_db   ss    
yy!ERUW[WeWeGfimosuyu|u|h} ~#4"5)-  / TYY__S1"56Jr   c                 f   t         j                  }d}| j                  r| j                  j                  }d| j                   d| }| j                   d| d}|j
                  j                  |d      }|j                          	 |j                  |      r|j                  |      }n%| j                         dz   }|j                  ||       	 |j                          | S # t
        j                  j                  $ r>}t        j!                  d| d	|j"                   d
|j$                          Y d }~| S d }~ww xY w# 	 |j                          w # t
        j                  j                  $ r<}t        j!                  d| d	|j"                   d
|j$                          Y d }~w d }~ww xY wxY w)NNOASSETznext_code_number-r[   z.lock   )timeout   zlock release error z, lock_name z
, timeout )APPREDIS_DBr8   rX   
class_nameredislockacquireexistsincrrk   setrelease
exceptions	LockErrorgdebugr   ro   )r   redis_dbsuffixkeylock_keyru   next_code_numberes           r   r   zCmfAsset.next_code_number   s   <<>>^^))F!$//!2!F8<oo&axu5~~""8R"8
	bs##+==#5 #'#H#H#JQ#N S"23b
 ##$	 ##-- b-aSTYYKzRVR^R^Q_`aa ##$	bb##-- b-aSTYYKzRVR^R^Q_`aabsO   AE C# #D> 2D99D>F0EF0F-12F(#F0(F--F0c                    d }d }d } ||      }t               }g }|}|r|j                  |v rt        d| d       |j                  |j                          ||      s||k(  r!|j	                   ||      j                         t
        j                  |j                        j                  |j                  g dd      }|r|j                          d	d
g}	|j                  dk(  r|	j                  ddg       n|	j                  dg       t        j                  j                  | ||      d|	      \  }
}t        |j                   |j"                  |j                  |
|      }|S )Nc                 (    | j                   dk(  rdS dS )Nr0   r   r2   )rs   )	category_s    r   get_model_namez5CmfAsset._build_asset_ui_form.<locals>.get_model_name   s    !*!5!5!F:ZNZr   c                 F    | j                   dk(  rdnd}t        | |      d   S )Nr0   asset_ui_formasset_type_ui_formr   rs   getattrr   	attr_names     r   get_category_formz8CmfAsset._build_asset_ui_form.<locals>.get_category_form   s)    +4+?+?=+PVjI9i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<P<PTa<a8: 9i00r   uE   Обнаружен цикл в структуре категорий Tr
   )tree_parent_idr   r   r   r   )r<   r=   rS   r   rR   r0   rO   r   r>   _main)
model_namerequired_grouprequired_fields)r   rR   _id	ui_fieldsui_group_fields)ry   r<   r   addappendcmfutilget_model_by_namers   rf   r   reverseextendr.   	CmfUiFormget_ui_fields_inheriteddictr   rR   )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
	1
 $H-u  </abnaopx|}]--.'6-8:S##$5m$D$G$GH#55h6I6IJOO //;KO	 P QM  	!6*-/""L+#>?""$4#56%+%5%5%M%M^H%=ggv &N &x"	? 

+
 r   c                     |j                  d      r$t        j                  j                  |g d      }n#t        j                  j                  |g d      }| j                  |      }|S )u:  
        Что-то вроде ui_get, но только для формы создания
        Метод нужен потому, что при создании самого актива еще не существует, и мы получаем его форму у категории актива
        zCmfAssetCat:)r   r   r   r;   )r   r   r   r   )r^   r.   r0   rf   r1   r   )r3   r   _kwargstmp_objr   s        r   r   zCmfAsset.ui_get_create_form   ss     $$^4((--!\ . ^G ,,11!f 2 hG ///Ar   )r=   r   c                   |sg }|dk(  rd}d}d}nd}d}d}t         j                  |      }| d| d	| | d	| g}	 |j                  |d
|	i|}
t        |
|      }| j	                  |      }t        |      }|d   D ]  }|j                  |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   rR   )r   r   rf   r   r   ry   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  s6   
 F#(N /*J'-N 4*O'//
; o.a 123a ;<=

 #+""DFFvF7N3///B[
!"34 	/EeHo.	/ kHT*-=HH+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   rY   r]   rk   r   r   r   r   __classcell__)r   s   @r   r   r      s    I--&&0099EEI K
& .

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