B
    f;                 @   s(   d dl T d dlmZ G dd deZdS )    )*)CmfAssetc                   s   e Zd Z fddZ fddZ fddZed fdd		Zed fd
d	Zdd Z	dd Z
dd Zdd Zdd Zd fdd	Zdd Zdd Z  ZS ) r   c                sF   |    |   |   |   | jjr4tddd t j|| d S )NuQ   Нельзя добавить объект в абстрактную группуT)abort)		_calc_cat_calc_parent_calc_logic_type_calc_workflow	asset_catZis_abstractZ	cmf_alertsupersave)selfargskwargs)	__class__ #./modules/asset/models/cmf_asset.pyr      s    zCmfAsset.savec                s   |    t j|| d S )N)r   r
   _save_import)r   r   r   )r   r   r   r      s    zCmfAsset._save_importc                s   t   dddddg S )Nzparent.*r   zasset_cat.parentzasset_cat.default_logic_typezasset_cat.is_abstract)r
   save_preload_fields)r   )r   r   r   r      s    zCmfAsset.save_preload_fieldsNc          
      sj   t  |}|sfddg}|tj|d7 }|tj|d7 }|tj|7 }|tj|d7 }|S )NnameZext_idasset_code_prefixdefault_logic_typemodel_idbar_codeproduct_information
unit_priceversion
short_name)r   )r   )r   r   r   r   r   r   )r
   import_shop_fieldsmodelsZCmfAssetSchemeCmfAssetCatZCmfAssetTypeCatZCmfAssetType)clsZfields_nameZresZcommon_fields)r   r   r   r      s*    


     
zCmfAsset.import_shop_fieldsc                st   |dkrX|sg }d }|r,| di  dd }|rXtjj |dgd}|jrX|dd|jgg}t j|f|||d|S )	NZasset_typesr	   idasset_types_cat)r!   fieldsZasset_type_catIN)filtermodels_listobject_fields)getr   r   r"   r
   field_options_list)r    Zrelation_field_namer%   r&   r'   r   Zasset_cat_idr	   )r   r   r   r)   >   s    zCmfAsset.field_options_listc             C   sN   | j sJtjjdgdddgdddggd| _ | j sJtjjdgdddgd| _ d S )Nparentsystem=Tr   u   Оборудование)r#   r%   )r	   r   r   r(   )r   r   r   r   r   M   s    

zCmfAsset._calc_catc             C   s"   | j s|   | js| j j| _d S )N)r	   r   r*   )r   r   r   r   r   V   s    zCmfAsset._calc_parentc             C   s   | j s
d S | jj| _d S )N)Zis_newr	   r   
logic_type)r   r   r   r   r   \   s    zCmfAsset._calc_logic_typec             C   s   | j stjjdd| _ d S )Nzasset.system:default)code)Zworkflowr   ZCmfWorkflowr(   )r   r   r   r   r   c   s    zCmfAsset._calc_workflowc             C   s0   |  dg | js&|   | jj  | jjjS )Nzparent.asset_code_prefix)Zload_fieldsr*   r   r   loadvalue)r   r   r   r   get_code_prefixg   s
    zCmfAsset.get_code_prefixFc                s   | j r| jjs|sd S | j s*t   d S |rx|  }| j j| drb| j jd|dkrxd| j	_t   d S | jjr| j j|   dsd | _ t   d S d S )N-T)
r.   r*   Z
is_changedr
   
_calc_coder1   r0   
startswithcountr-   )r   Zfrom_recalculateZ
new_prefix)r   r   r   r3   n   s"    
,
 
zCmfAsset._calc_codec             C   sN   d}| j dddgdd| jgdd| jggd	gd
d}|rJt|jdd }|S )Nr.   z
SIMILAR TOz
%-[0-9]+\Zr*   r,   r!   z!=z-cmf_created_atT)r%   Zorder_byZinclude_deletedr2   )sget	parent_idr!   intr.   split)r   Z
max_numberZlastr   r   r    _get_current_code_number_from_db   s    "z)CmfAsset._get_current_code_number_from_dbc             C   s   t j}d}| jr| jj}d| j d| }| j d| d}|jj|dd}|  z2||rl|	|}n| 
 d }||| W d y|  W nF tjjk
r } z$td| d	|j d
|j  W d d }~X Y nX X | S )NZNOASSETznext_code_number-r2   z.lock   )timeout   zlock release error z, lock_name z
, timeout )ZAPPZREDIS_DBr8   r0   
class_nameZredislockacquireexistsZincrr;   setrelease
exceptionsZ	LockErrorgdebugr   r=   )r   Zredis_dbsuffixkeyZlock_keyr@   next_code_numberer   r   r   rJ      s$    
4zCmfAsset.next_code_number)N)NNN)F)__name__
__module____qualname__r   r   r   classmethodr   r)   r   r   r   r   r1   r3   r;   rJ   __classcell__r   r   )r   r   r      s   	%	
r   N)Zcmf.includeZmodules.asset.fields.cmf_assetr   r   r   r   r   <module>   s   