U
    [h A                     @   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d d! Zeed"dd#d$d% Zd&d' Z fd(d)Z fd*d+Z  ZS )0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   relation_field_namerU   r   r    r!   kwargsr3   r   r   rY      s0         zCmfReq.field_options_listc              	   K   s   |sg }| dd }|rR|dddd| dgddd| dgddd| dggg}|rv| dd rv|dd	| dgg}tjjf |||d
|S )NsearchORnamer   r   textaliasrF   r   r   r    r!   )r0   r   ZCmfComponentr   )r   r[   rU   r   r    r!   r\   r]   r   r   r   rW      s     4zCmfReq.components_options_listc                 K   sF   |sg }|r,| dd r,|dd| dgg}tjjf |||d|S )NrF   r   rb   )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   rh      s    	zCmfReq.create_new_cmf_verc              	      s&   |  dddddddg t jf |S rc   )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   r_   TZ	only_datar   Z	person_id	favoritesr   )rT   r(   r&   copyr   Z
CmfCommentr   r6   r_   rR   ZCmfPersonVarr0   gZcurrent_personrk   r=   )r   argsr\   resZcommentsZcommentZnew_commentZ
person_varr3   r   r   rl     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 )Nre   zchild_reqs.parent_reqsrd   zparent_reqs.child_reqsrg   zaffect_reqs.affected_reqsrf   zaffected_reqs.affect_reqsc                    s0   | D ]&}t ||d }|r |kr|  qd S r   )getattrremove)ZobjsZrel_attrobjrelr   r   r   clean_relation6  s    z8CmfReq._after_create_new_cmf_ver.<locals>.clean_relation)r%   re   rd   rg   rf   )r   Znew_currt   r   r   r   _after_create_new_cmf_ver-  s        z CmfReq._after_create_new_cmf_verc                 C   sp   | sd S t jjddgdd| ggd}|s,d S t jj| dgd}|D ](}|j|_|jdd t j|jj qBd S )NrQ   rV   r   )r    r   )r6   r    Trj   )	r   r   r   r0   rV   rR   update_children_folderr6   r9   )
obj_req_idre   Zobj_reqrG   r   r   r   rv   A  s    
zCmfReq.update_children_folderu+   Перемещение требования)descriptionZshow_bg_progressbarc                 C   s   t j|  d S r   )r   r   rv   )rw   r   r   r   change_folder_by_hierarchyQ  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jid d S )	Nr   r_   ri   u   Требованияr   r   rw   )r\   )Zis_newZcmf_ver_currV   
isinstancerQ   r9   r   rP   r   r(   
is_changedrN   r0   r   Zschedule_deferred_jobry   r6   r   r   r   r   _sync_tree_parent_and_folderV  s.    



z#CmfReq._sync_tree_parent_and_folderc                    s   |    t j||S r   )r|   r&   rR   )r   rn   r\   r3   r   r   rR   t  s    zCmfReq.savec                    s*   t    | jjr&| jr&t| jj| _d S r   )r&   _clean_textZ
text_draftr{   r   r9   r   r3   r   r   r}   x  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   rh   r	   rl   ru   staticmethodrv   Zcmf_deferred_jobry   r|   rR   r}   __classcell__r   r   r3   r   r      sZ   
	"                      


r   N)Zcmf.includeZmodules.project.fieldsr   Zcmf.util.cmf_clean_textr   r   r   r   r   r   <module>   s   