
    (<iW>                     P    d dl  d dlmZ d dlmZ  G d dej
                        Zy)    )*)cmf_req)markup_html_cleanc                   B    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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d        Ze edd      d               Zd Z f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                  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   s.    *
& ""''>\/]'^^    c                      y N selfs    r   
_calc_codezCmfReq._calc_code   s    r   c                 P   | j                  g d       | j                  r| j                  st        |          S | j                  j
                  j                          d| j                  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}|s#t        |          }|j                  d      d   }n`|d
   j                  j                  d      d   }t        d|       t        |      dz   }t        |      j!                  t#        |            }	 | dt        |      j!                  t#        |             }t        j                  j%                  |      s|S t        |      }|dz  }[)N)
logic_typeparentcmf_version-r   z-codeANDr    =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   	conditionlast_cmf_req_instancelast_numnext_num	next_code	__class__s         r   r
   zCmfReq.gen_code   s   @A{{$//7#%%{{3388:;1T__=\=\=a=a=c<de	 & 2 28Y3,Ai["23
 a& !3 	!
 $w')H~~c*2.H,Q/44::3?CHYXK.!8}q(H8}**3x=9H$+Qs8}':':3x='I&JKI==$$)$4  8}HMH r   c                 "   t         j                  j                  |      }t         j                  j                  |      }|r|sy |j                  j                          d|j                  j                          }t         j                  j                  dgdgdgdd|gddd	| d	ggd
      }i }t        |      }	d }
|D ]  }|j                  j                  }|j                  dd      }t        |      dk7  r;|\  }}|	dkD  r |j                  |      rt        |      |	k  re|r |j                  |      sy|t        |      d  }d}|D ]  }|dk(  r|dz  } n ||d  }|r|j                         st        |      }|j                  d      r&|j                  dd      }t        |      dk7  r|d   }||f}||vrg ||<   ||   j!                  |       |
r|}
 t#               }|j%                         D ]  \  \  }}}|j'                          t        |      dk(  rr|d   }|d   j                  j                  j                  dd      d   }|dz   }t)        |      j+                  t        |            }|j-                  | d| |        t/        |      }d }|D ]  }||k  r	||kD  r|} n|dz   } |Nt)        |      }|t        |      z
  t        t)        |            z   }d|z  |z   } |j-                  | d| |         |s|d   }|dz   }t)        |      }|t        |      z
  t        t)        |            z   }|d|z  z   |z   }!|r|!j                  |      sn|j-                  | d|!         t        |      }|
s|S | dt)        t        |
      dz         j+                  t        |
             }"|"|v rF|j1                  |"      dk7  r2|j3                  |j1                  |"             |j5                  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
,,00M0B!22779:!N<Z<Z<_<_<a;bc	MM&&8'(3
+Ai["23
 ! ' 	
	  #$: ;	 /	'C88>>DKKQ'E5zQ!&FJ%)#../EF#j/\qJq &!,,-CD',B(C(DE
 #$" 3;'1,'	  **=*>?#+;+C+C+E)*F  'sA.v;!#!45I -+-i()$++F3&	_/	'd 6C6I6I6K )	:2)V(7LLN 7|q !!*(|0066==c1EbI"Q;"8}223|3DE

fXQ'=&>|nMN 'lGI "== 'I'" $i.2S\ACIDWW!$|!3w >

fXQ'=&>}oNO !"+"Q;h-2S\ACHDVV 5l8JKgU-1G1GH^1_JJ&;-89S)	:X f M%;aC	NQ,>(?(E(Ec)n(U'VWV#^(D(IJJv||N34MM!^,r   c                     |dk(  r | j                   |f||||d|S |dk(  r | j                  |f||||d|S t        |   |f||||d|S )N
components)object_fieldsr   r(   r)   folder)components_options_listfolder_options_listr.   field_options_list)r   relation_field_namert   r   r(   r)   kwargsr>   s          r   rx   zCmfReq.field_options_list   s     ,..3../B ZR_hn5;hZRXZ Z H,*3**+> Zmdj5;hZRXZ Zw)y/<VTZemyqwy 	yr   c           	         |sg }|j                  dd       }|r|dddd| dgddd| dgddd| dggg}|r(|j                  dd       r|dd	|j                  d      gg}t        j                  j                  d|||d
|S )NsearchORnamer%   r&   textaliasrS   r$   r   r(   r)   r   )r8   r   CmfComponentr   )r   ry   rt   r   r(   r)   rz   r|   s           r   rv   zCmfReq.components_options_list   s     FHd+1VHA?67VWX^W__`TaBbfmovz{  }C  |D  DE  yF  fG  HF ]..{DA{C1B1B;1OPQF""''bvfxb[abbr   c                     |sg }|r(|j                  dd       r|dd|j                  d      gg}t        j                  j                  d|||d|S )NrS   r$   r   r   )r8   r   CmfReqFolderr   )r   ry   rt   r   r(   r)   rz   s          r   rw   zCmfReq.folder_options_list   s^     F]..{DA{C1B1B;1OPQF""''bvfxb[abbr   c                 H    | j                  g d       t        | 	          y )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   s#     
 	 	"$r   c                 H    | j                  g d       t        |   di |S )Nr   r   )r-   r.   r   )r   rz   r>   s     r   r   zCmfReq.create_from_template   s+     
 	 w+5f55r   c                    | j                   j                          t        |   |i |}t        j
                  j                  dd| j                  g      }|D ]1  }|j                  ||j                        }|j                  d       3 t        j                  j                  dddt        j                  j                  gd	d
| j                  ggg      }|r-|j                  j                  |       |j                  d       |S )NrS   ==r   )r    r~   T	only_datar#   	person_id	favoritesr   )rs   r0   r.   copyr   
CmfCommentr   r@   r~   saveCmfPersonVarr8   gcurrent_personr   rJ   )	r   argsrz   rescommentscommentnew_comment
person_varr>   s	           r   r   zCmfReq.copy  s    glD+F+$$))+tTWW1M)N 	-G!,,c,EKt,	-
 ((,,U6A4IYIYI\I\5]6A4$''5S5U, 

   '',OOdO+
r   c                      |j                  g d        fd} ||j                  d        ||j                  d        ||j                  d        ||j                  d       y )N)r   zchild_reqs.parent_reqsr   zparent_reqs.child_reqsr   zaffect_reqs.affected_reqsr   zaffected_reqs.affect_reqsc                 `    | D ](  }t        ||d       }|s|v s|j                         * y r   )getattrremove)objsrel_attrobjrelr   s       r   clean_relationz8CmfReq._after_create_new_cmf_ver.<locals>.clean_relation"  s5     %c8T243;JJt$%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w**L9w**O<w,,m<r   c                 \   | sy t         j                  j                  ddgdd| gg      }|sy t         j                  j                  | dg      }|D ]X  }|j                  |_        |j                  d       t         j                  j                  |j                  j                         Z y )Ntree_parentru   r   )r(   r   )r@   r(   Tr   )	r   r   r   r8   ru   r   update_children_folderr@   rF   )
obj_req_idr   obj_reqr\   s       r   r   zCmfReq.update_children_folder-  s    ]]''x/H0=tj\/R ( T
--##z8*#E 	?C CJHHtH$MM00>	?r   u+   Перемещение требования)descriptionshow_bg_progressbarc                 B    t         j                  j                  |        y r   )r   r   r   )r   s    r   change_folder_by_hierarchyz!CmfReq.change_folder_by_hierarchy=  s     	,,Z8r   c                 4   | j                   r| j                  r| j                  st        | j                  j
                  t        j                        r| j                  | _        nmt        | j                  j
                  t        j                        r?| j                  j                  j                          | j                  j                  | _        | j                   s| j                  j                  s| j                  j                  r| j                  j                  rt        | j                  j
                  t        j                        r	d | _        nt        | j                  j
                  t        j                        r@| j                  j                  j                          | j                  j                  | _        nt        | j                  j
                  t        j                        rg| j                  | _        nU| j                  s8t        j                  j                  dg ddd| j                  gg      | _        n| j                  | _        t        t        j                  j                  d| j                   j
                  i       y y y )Nr#   )r~   r   u   Требованияr    r   r   r   )rz   )is_newcmf_ver_curru   
isinstancer   rF   r   r   r   r0   
is_changedCmfRegistryr8   r    schedule_deferred_jobr   r@   r   s    r   _sync_tree_parent_and_folderz#CmfReq._sync_tree_parent_and_folderB  s   ;;4++;;d..44f6I6IJ"&"2"2DK 0 0 6 6F$$++002"&"2"2"9"9DK{{ 0 0 ; ;t{{?U?U**d..44f6H6HI"&DK 0 0 6 6F$$++002"&"2"2"9"9DK 0 0 6 68K8KL"&"2"2DK{{'-'9'9'='=eFlGOQUW[WbWbFcFH'= (@D$ (,{{D$ "&--"J"JT`bfbibiboboSpq) @V{r   c                 B    | j                          t        |   |i |S r   )r   r.   r   r   r   rz   r>   s      r   r   zCmfReq.save`  s#    ))+w|T,V,,r   c                     t         |           | j                  j                  r2| j                  r%t	        | j                  j
                        | _        y y y r   )r.   _clean_text
text_draftr   r   rF   r   s    r   r   zCmfReq._clean_textd  s?    ??%%$///0E0EFDO +:%r   c                     | j                   j                          | j                   r$|j                  dd       |j                  dd       t        |   |i |S )NforceF	recursiveT)
tree_nodesr0   
setdefaultr.   deleter   s      r   r   zCmfReq.deletej  sN    ??gu-k40w~t.v..r   ) )NNNN)__name__
__module____qualname__	api_allowr   r   api_methodsclassmethodr   r   r
   r	   rx   rv   rw   r   r   r   r   staticmethodr   cmf_deferred_jobr   r   r   r   r   __classcell__)r>   s   @r   r   r      s   I..,, 0 K _ _ D A AF ]a	y 	y ]ac c  ]ac c
%6*=( ? ? "Oeij9 k 9r<-G/ /r   r   N)cmf.includemodules.project.fieldsr   cmf.util.cmf_clean_textr   r   r   r   r   <module>r      s      * 5i/W^^ i/r   