U
    ph?                     @   s6   d dl T d dlmZ d dlmZ G dd dejZdS )    )*)cmf_req)markup_html_cleanc                       s   e Zd ZdZejjddddg Zedd Zdd	 Z	 fd
dZ
ed(ddZdd Zed) fdd	Zed*ddZed+ddZ fddZ fddZ fddZdd Zeed d! Zd"d# Z fd$d%Z fd&d'Z  ZS ),CmfReqTget_predefined_logical_typesget_next_codegen_codecreate_from_templatec                 C   s   dddg}t jjdd|gdS )Nzreq.businessreq:defaultzreq.funcreq:defaultzreq.techreq:defaultcodeINfilter)modelsCmfLogicTypelist)clsZcodes_predefined_logical_types r   #./modules/project/models/cmf_req.pyr      s
    z#CmfReq.get_predefined_logical_typesc                 C   s   d S Nr   selfr   r   r   
_calc_code   s    zCmfReq._calc_codec              
      s&  |  dddg | jr| js&t  S | jj  d| jj  }tj	j
dgdgdgdd| jgdd	d
| d
ggddgd}d}|st  }|dd }n@|d jdd }td| t|d }t|t|}| dt|t| }tj	j|ds|S t|}|d7 }qd S )N
logic_typeparentZcmf_version-r
   z-codeAND=ILIKE%r      )fieldsorder_byr   slice0z	last_num=)r
   )load_fieldsr   r   superr   task_code_prefixloadobj_code_prefixr   r   r   splitr
   printintstrzfilllenget)r   	conditionZlast_cmf_req_instanceZlast_numnext_numZ	next_code	__class__r   r   r      s4    



zCmfReq.gen_code c           #   
   C   s  t jj|d}t jj|d}|r$|s(d S |j  d|j  }t jjdgdgdgdd|gddd	| d	ggd
d}i }t	|}	d }
|D ]}|j
j}|dd}t	|dkrq|\}}|	dkr||rt	||	k rq|r||sq|t	|d  }d}|D ] }|dkr|d7 }n q$q||d  }|r| s@qt|}|drx|dd}t	|dkrpq|d }||f}||krg ||< || | |
s|}
qt }| D ]v\\}}}|  t	|dkr2|d }|d j
jddd }|d }t|t	|}|| d| |  qt|}d }|D ]0}||k rTqB||krh|} qt|d }qB|d k	rt|}|t	| t	t| }d| | } || d| |   |r|d }|d }t|}|t	| t	t| }|d|  | }!|r|!|r|| d|!  qt|}|
sD|S | dtt|
d t	|
 }"|"|kr||"dkr|||" |d|" |S )N)idr   r
   z-cmf_created_atr   r   r   r   r   T)r    r!   r   Zinclude_deletedr      r   r#   ZDEL_r$   )r   Z
CmfProjectr0   r   r'   r(   r)   r   r   r/   r
   valuersplit
startswithisdigitr,   appendsetitemssortr-   r.   addminindexpopinsert)#r   	parent_idZlogic_type_idZfilter_leading_symbolsZ
parent_objZlogic_type_objr1   Z	reqs_listZgrouped_codesZleading_filter_lengthZ	last_codereqr
   partsprefixZ
number_strZleading_zeros_countcharZsignificant_partnumberZ	group_keyresultZnumbersZmax_numZlast_num_strr2   Znext_num_strcurrentZ	first_gapZnumZnum_strZzeros_neededZformatted_numZnew_num_strZlast_next_coder   r   r   r   ?   s    









$zCmfReq.get_next_codec                 C   s   | j   | j sd S | j j  d }| j jjdrTtjjdd| j j	jgdgd}n^| j jjdrtj
jdd| j j	jgdgd}n.| j jjdrtjjdd| j j	jgdgd}|sd S | |jkr|j|  |  |j  d S )NCmfRegistryr
   r   
tree_nodes)r   r    r   CmfReqFolder)tree_parentr(   rO   r6   r9   r;   r   rN   r0   r
   r   rP   r=   saveZdpZcommit)r   rQ   r   r   r   _calc_tree_parent   s"    
  
zCmfReq._calc_tree_parentNc                    sf   |dkr$| j |f||||d|S |dkrH| j|f||||d|S t j|f||||d|S )N
components)object_fieldsr   r    r!   folder)components_options_listfolder_options_listr&   field_options_listr   Zrelation_field_namerU   r   r    r!   kwargsr3   r   r   rY      s0         zCmfReq.field_options_listc                 K   sF   |sg }|r,| dd r,|dd| dgg}tjjf |||d|S NrF   r   )r   r    r!   )r0   r   ZCmfComponentr   rZ   r   r   r   rW      s
    zCmfReq.components_options_listc                 K   sF   |sg }|r,| dd r,|dd| dgg}tjjf |||d|S r\   )r0   r   rP   r   rZ   r   r   r   rX      s
    zCmfReq.folder_options_listc              	      s&   |  dddddddg t   d S NZwishes_tasksZ	dev_tasksZreq_coverage_testcasesparent_reqs
child_reqsaffected_reqsaffect_reqs)r%   r&   create_new_cmf_verr   r3   r   r   rb      s    	zCmfReq.create_new_cmf_verc              	      s&   |  dddddddg t jf |S r]   )r%   r&   r	   )r   r[   r3   r   r   r	     s    	zCmfReq.create_from_templatec                    s   | j   t j||}tjjdd| jgd}|D ] }|j||jd}|j	dd q2tj
jdddtjjgd	d
| jgggd}|r|j| |j	dd |S )NrF   ==r   )r   nameTZ	only_datar   Z	person_id	favoritesr   )rT   r(   r&   copyr   Z
CmfCommentr   r6   rd   rR   ZCmfPersonVarr0   gZcurrent_personrf   r=   )r   argsr[   resZcommentsZcommentZnew_commentZ
person_varr3   r   r   rg     s    
zCmfReq.copyc              
      sZ   | ddddddddg  fd	d
}||jd ||jd ||jd ||jd d S )Nr_   zchild_reqs.parent_reqsr^   zparent_reqs.child_reqsra   zaffect_reqs.affected_reqsr`   zaffected_reqs.affect_reqsc                    sT   | D ]J}t ||d }|rt|} |kr2|  t||t| |jdd qd S )NTre   )getattrr>   removesetattrr   rR   )ZobjsZrel_attrobjrelZrel_setr   r   r   clean_relation0  s    
z8CmfReq._after_create_new_cmf_ver.<locals>.clean_relation)r%   r_   r^   ra   r`   )r   Znew_currp   r   r   r   _after_create_new_cmf_ver'  s        
z CmfReq._after_create_new_cmf_verc                 C   sR   | sd S t jjddgdd| ggd}|D ]$}| j|_|jdd t j| q(d S )NrQ   rV   r   )r    r   Tre   )r   r   r   rV   rR   Zupdate_children_folder)Z
obj_req_idr_   rG   r   r   r   change_folder_by_hierarchy?  s    
z!CmfReq.change_folder_by_hierarchyc                 C   s  | j rR| jrR| jsRt| jjtjr,| j| _n&t| jjtjrR| jj	  | jj| _| j s| jj
sl| jj
r| jj
rt| jjtjrd | _n@t| jjtjr| jj	  | jj| _nt| jjtjr| j| _n4| jstjjddddgdd| jggd| _n| j| _ttjjd| jid d S )	Nr   rd   rc   u   Требованияr   r   Zobj_req)r[   )Zis_newZcmf_ver_currV   
isinstancerQ   r9   r   rP   r   r(   
is_changedrN   r0   r   Zschedule_deferred_jobrr   r6   r   r   r   r   _sync_tree_parent_and_folderK  s.    



z#CmfReq._sync_tree_parent_and_folderc                    s   |    t j||S r   )ru   r&   rR   )r   ri   r[   r3   r   r   rR   i  s    zCmfReq.savec                    s*   t    | jjr&| jr&t| jj| _d S r   )r&   _clean_textZ
text_draftrt   r   r9   r   r3   r   r   rv   m  s    
zCmfReq._clean_text)r5   )NNNN)NNNN)NNNN)__name__
__module____qualname__Z	api_allowr   r   Zapi_methodsclassmethodr   r   r   r   rS   rY   rW   rX   rb   r	   rg   rq   staticmethodZcmf_deferred_jobrr   ru   rR   rv   __classcell__r   r   r3   r   r      sV   
	"               
       

r   N)Zcmf.includeZmodules.project.fieldsr   Zcmf.util.cmf_clean_textr   r   r   r   r   r   <module>   s   