
    Y~h?                     L    d dl T d dlmZ d dlmZ  G d dej                  ZdS )    )*)cmf_req)markup_html_cleanc                   4    e Zd ZdZej        j        g dz   Zed             Zd Z	 fdZ
edd            Zd Ze	 d fd
	            Ze	 dd            Ze	 dd            Z fdZ fdZ fdZd Zeed                         Zd Z fdZ fdZ xZS )CmfReqT)get_predefined_logical_typesget_next_codegen_codecreate_from_templatec                 P    g d}t           j                            dd|g          S )N)zreq.businessreq:defaultzreq.funcreq:defaultzreq.techreq:defaultcodeINfilter)modelsCmfLogicTypelist)clscodes_predefined_logical_typess     #./modules/project/models/cmf_req.pyr   z#CmfReq.get_predefined_logical_types   s8    *
 *
 *
& "''>\/]'^^^    c                     d S N selfs    r   
_calc_codezCmfReq._calc_code   s    r   c                    |                      g d           | j        r| j        s t                                                      S | j        j                                         d| j        j                                         }t          j	        
                    dgdgdgdd| j        gddd	| d	ggd
dg          }d}|s<t                                                      }|                    d          d         }ny|d
         j                            d          d         }t          d|           t          |          dz   }t          |                              t#          |                    }	 | dt          |                              t#          |                     }t          j	                            |          s|S t          |          }|dz  }k)N)
logic_typeparentcmf_version-r   z-codeANDr    =ILIKE%r      )fieldsorder_byr   slice0z	last_num=T)r   )load_fieldsr    r   superr
   task_code_prefixloadobj_code_prefixr   r   r   splitr   printintstrzfilllenget)r   	conditionlast_cmf_req_instancelast_numnext_num	next_code	__class__s         r   r
   zCmfReq.gen_code   s   @@@AAA{ 	&$/ 	&77##%%%{388::eeT_=\=a=a=c=cee	 & 2 28Y3,"2i"2"2"23
 a& !3 	!
 	!
 $ 	:ww''))H~~c**2.HH,Q/4::3??CH.X..!!!8}}q(H8}}**3x==99H	$KKs8}}':':3x=='I'IKKI=$$)$44 !  8}}HMH	r    c                 ~	   t           j                            |          }t           j                            |          }|r|sd S |j                                         d|j                                         }t           j                            dgdgdgdd|gddd	| d	ggd
          }i }t          |          }	d }
|D ]S}|j
        j        }|                    dd          }t          |          dk    r9|\  }}|	dk    r)|                    |          rt          |          |	k     rm|r-|                    |          s|t          |          d          }d}|D ]}|dk    r|dz  } ||d          }|r|                                st          |          }|                    d          r3|                    dd          }t          |          dk    r|d         }||f}||vrg ||<   ||                             |           |
s|}
Ut#                      }|                                D ]\  \  }}}|                                 t          |          dk    r|d         }|d         j
        j                            dd          d         }|dz   }t)          |                              t          |                    }|                    | d| |            t/          |          }d }|D ]}||k     r	||k    r|} n|dz   }|bt)          |          }|t          |          z
  t          t)          |                    z   }d|z  |z   } |                    | d| |             |r|d         }|dz   }t)          |          }|t          |          z
  t          t)          |                    z   }|d|z  z   |z   }!|r|!                    |          r|                    | d|!            t          |          }|
s|S | dt)          t          |
          dz                                 t          |
                     }"|"|v rW|                    |"          dk    r>|                    |                    |"                     |                    d|"           |S )N)idr"   r   z-cmf_created_atr#   r    r$   r%   r&   T)r(   r)   r   include_deletedr'      r   r+   DEL_r,   )r   
CmfProjectr8   r   r/   r0   r1   r   r   r7   r   valuersplit
startswithisdigitr4   appendsetitemssortr5   r6   addminindexpopinsert)#r   	parent_idlogic_type_idfilter_leading_symbols
parent_objlogic_type_objr9   	reqs_listgrouped_codesleading_filter_length	last_codereqr   partsprefix
number_strleading_zeros_countcharsignificant_partnumber	group_keyresultnumbersmax_numlast_num_strr<   next_num_strcurrent	first_gapnumnum_strzeros_neededformatted_numnew_num_strlast_next_codes#                                      r   r	   zCmfReq.get_next_code?   s{   &**i*88
,00M0BB 	 	F!27799ccN<Z<_<_<a<acc	M&&8'(3
+"2i"2"2"23
 ! ' 	
 	
	  #$: ; ;	 /	' /	'C8>DKKQ''E5zzQ!&FJ%))#../EFF *JMj//\qJqJq & F!,,-CDD ',B(C(C(D(DE
 #$"  3;;'1,''  **=*>*>?# +;+C+C+E+E )**F  '' #sA..v;;!##!45I --+-i()$++F333 '&	 6C6I6I6K6K )	: )	:2)V(7LLNNN 7||q  !!*(|06==c1EEbI"Q;"8}}223|3D3DEE

fMM'=M|MMNNN 'llGI " "==== 'IE' $i..2S\\ACIDWDWW!$|!3w >

fNN'=N}NNOOO  	:!"+"Q;h--2S\\ACHDVDVV 5l8JKgU- :1G1GH^1_1_ :JJ&88;88999 f  	M%WWC	NNQ,>(?(?(E(Ec)nn(U(UWWV##^(D(D(I(IJJv||N33444MM!^,,,r   c                 J   | j                                          | j         sd S | j         j                                         d }| j         j        j                            d          r5t          j                            dd| j         j	        j        gdg          }n| j         j        j                            d          r5t          j
                            dd| j         j	        j        gdg          }nX| j         j        j                            d          r4t          j                            dd| j         j	        j        gdg          }|sd S | |j        vrI|j                            |            |                                 |j                                         d S d S )NCmfRegistryr   r$   
tree_nodes)r   r(   r   CmfReqFolder)tree_parentr0   ru   rA   rG   rI   r   rt   r8   r   r   rv   rK   savedpcommit)r   rw   s     r   _calc_tree_parentzCmfReq._calc_tree_parent   s    	F#((***$//>> 	| ,00dFVF[Fa8blxky0zzKK &11(;; 	| -++FCAQAVA\3]gsft+uuKK &11.AA 	| -11&#tGWG\Gb9cmylz1{{K 	F{---"))$///N!!##### .-r   Nc                     |dk    r | j         |f||||d|S |dk    r | 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_namer~   r   r(   r)   kwargsr>   s          r   r   zCmfReq.field_options_list   s     ,...3./B ZR_hn5;hZ ZRXZ Z Z H,,*3*+> Zmdj5;hZ ZRXZ Z Z)uww)y/<VTZemy yqwy y 	yr   c                     |sg }|r0|                     dd           r|dd|                     d          gg}t          j        j        d|||d|S NrT   r$   )r   r(   r)   r   )r8   r   CmfComponentr   r   r   r~   r   r(   r)   r   s          r   r   zCmfReq.components_options_list   u      	F 	R]..{DAA 	R{C1B1B;1O1OPQF"'bvfxbb[abbbr   c                     |sg }|r0|                     dd           r|dd|                     d          gg}t          j        j        d|||d|S r   )r8   r   rv   r   r   s          r   r   zCmfReq.folder_options_list   r   r   c                 v    |                      g d           t                                                       d S )Nwishes_tasks	dev_tasksreq_coverage_testcasesparent_reqs
child_reqsaffected_reqsaffect_reqs)r-   r.   create_new_cmf_verr   r>   s    r   r   zCmfReq.create_new_cmf_ver   sH     
 
 
 	 	 	 	""$$$$$r   c                 d    |                      g d            t                      j        di |S )Nr   r   )r-   r.   r   )r   r   r>   s     r   r   zCmfReq.create_from_template  sI     
 
 
 	 	 	 ,uww+55f555r   c                 
   | j                                           t                      j        |i |}t          j                            dd| j        g          }|D ]4}|                    ||j                  }|	                    d           5t          j
                            dddt          j        j        gd	d
| j        ggg          }|r0|j                            |           |	                    d           |S )NrT   ==r   )r    nameT	only_datar#   	person_id	favoritesr   )r}   r0   r.   copyr   
CmfCommentr   rA   r   rx   CmfPersonVarr8   gcurrent_personr   rK   )	r   argsr   rescommentscommentnew_comment
person_varr>   s	           r   r   zCmfReq.copy  s   egglD+F++$))+tTW1M)NN 	- 	-G!,,c,EEKt,,,, (,,U6A4IYI\5]6A4$'5S5U, 
 

  	, '',,,OOdO+++
r   c                      |                     g d            fd} ||j        d            ||j        d            ||j        d            ||j        d           d S )N)r   zchild_reqs.parent_reqsr   zparent_reqs.child_reqsr   zaffect_reqs.affected_reqsr   zaffected_reqs.affect_reqsc                     | D ]q}t          ||d           }|r\t          |          }|v r|                               t          ||t	          |                     |                    d           rd S )NTr   )getattrrL   removesetattrr   rx   )objsrel_attrobjrelrel_setr   s        r   clean_relationz8CmfReq._after_create_new_cmf_ver.<locals>.clean_relation0  s     - -c8T22 -!#hhGwt,,,C4==999HHtH,,,- -r   r   r   r   r   )r-   r   r   r   r   )r   new_curr   s   `  r   _after_create_new_cmf_verz CmfReq._after_create_new_cmf_ver'  s     
 
 
 	 	 		- 	- 	- 	- 	- 	w)=999w*L999w*O<<<w,m<<<<<r   c                     | sd S t           j                            ddgdd| gg          }|D ]C}| j        |_        |                    d           t           j                            |           Dd S )Nrw   r   r   )r(   r   Tr   )r   r   r   r   rx   update_children_folder)
obj_req_idr   r]   s      r   change_folder_by_hierarchyz!CmfReq.change_folder_by_hierarchy?  s      	F]''x/H0=tj\/R ( T T
 	6 	6C#*CJHHtH$$$M005555	6 	6r   c                    | j         r| j        r| j        st          | j        j        t          j                  r| j        | _        nSt          | j        j        t          j                  r/| j        j        	                                 | j        j        | _        | j         sE| j        j
        s| j        j
        r.| j        j
        rt          | j        j        t          j                  rd | _        nt          | j        j        t          j                  r0| j        j        	                                 | j        j        | _        nwt          | j        j        t          j                  r| j        | _        nF| j        s3t          j                            dg ddd| j        gg          | _        n| j        | _        t          t          j        j        d| j        i           d S d S d S )Nr#   )r   r   u   Требованияr    r   r   obj_req)r   )is_newcmf_ver_curr   
isinstancerw   rG   r   rv   r   r0   
is_changedrt   r8   r    schedule_deferred_jobr   rA   r   s    r   _sync_tree_parent_and_folderz#CmfReq._sync_tree_parent_and_folderK  s   ; 	:4+ 	:; :d.4f6IJJ :"&"2DKK 0 6FF :$+00222"&"2"9DK{ 	i 0 ; 	it{?U 	i* 3d.4f6HII 3"&DKK 0 6FF 3$+00222"&"2"9DKK 0 68KLL 3"&"2DK{ 3'-'9'='=eFlFlFlGOQUW[WbFcFH'= (@ (@D$$ (,{D$ "&-"JT]_c_fSghhhhhh)	i 	i 	i 	ir   c                 ^    |                                    t                      j        |i |S r   )r   r.   rx   )r   r   r   r>   s      r   rx   zCmfReq.savei  s0    ))+++uww|T,V,,,r   c                     t                                                       | j        j        r'| j        r"t	          | j        j                  | _        d S d S d S r   )r.   _clean_text
text_draftr   r   rG   r   s    r   r   zCmfReq._clean_textm  sa    ?% 	G$/ 	G/0EFFDOOO	G 	G 	G 	Gr   )r?   )NNNN)__name__
__module____qualname__	api_allowr   r   api_methodsclassmethodr   r   r
   r	   r{   r   r   r   r   r   r   r   staticmethodcmf_deferred_jobr   r   rx   r   __classcell__)r>   s   @r   r   r      s       I., 0 0 0 K _ _ [_           D A A A [AH$ $ $& ]a	y 	y 	y 	y 	y [	y ]ac c c [c ]ac c c [c
% 
% 
% 
% 
%6 6 6 6 6    *= = =0 6 6  \6i i i<- - - - -G G G G G G G G Gr   r   N)cmf.includemodules.project.fieldsr   cmf.util.cmf_clean_textr   r   r   r   r   <module>r      s        * * * * * * 5 5 5 5 5 5jG jG jG jG jGW^ jG jG jG jG jGr   