
    h'=                     x    d dl T d dlT d dlZd dlZd dlT d dlZddZ eddd	          	 	 	 	 	 dd
            Z	dS )    )*NcsvFc                    ddl m}m} t          j                                        }	|	                    d          }
dt          j        j         d|
 d| }t          
                    t          j        |          }|                                5  |                                 d d d            n# 1 swxY w Y    |t          | |j        |||||d|           |j        S )	Nr   )schedule_deferred_jobcmfutilz%Y%m%d%H%M%Szexport..)parentname)
class_nameres_attachment_idfield_namesbqlformat_fileinclude_archivedorder_by)kwargs)cmf.includer   r   datetimenowstrftimegcurrent_useridmodelsCmfAttachmentdisable_aclsaveexport2file_taskurl)r   r   r   r   r   r   r   r   r   r   formatted_timeexport_filename
attachments                ./cmf/util/cmf_export.pyexport2filer$   	   sJ   :::::::: 



!
!C \\.11N S 1RRNRR[RRO%%Q^/%RRJ					                **ISCN;>CNHX@H4> 4> 7=4> ? ? ? ? >s   B11B58B5u'   Экспорт данных в файл   T)descriptionpriorityshow_bg_progressbarc                   0123456789:;<= ddl 0ddlm4 | dk    77rd} t          t                    |          3t          j                            |          }dt          f4fd223fd	}	dH5fd
	5d 8dt          f3fd}
s#d 3j	        
                                D             t                      }D ]v}|dk    rd}nV3j	                            |          r<t          3j	                            |          t          j	        j                  r|dz  }|                    |           w| |
          1d1v rd1d<   t          j                    5 }|dk    r| d}t#          |dd          5 }ddl}|                    |dd|j                  }g 6t+           |	                    D ]\  9;g }D ]}9dk    rW6                    1                    |                     |dv r+6                    1                    |           d            8;|          }t-          3|d          }|                     5||                     |dv rC0                     5 8;|                    d          }|                    |j                   9dk    r|                    6           |                    |           	 ddd           n# 1 swxY w Y   nM|dk    r!ddlm} dd lm}  ||d!          }|                    d"          }|                    d#d$           |                    d%          }|                    |           |                    d&          }d'|_        |                    |           |                    d(          }t@          j!        |_        |                    |           |                    d)          }d*|_        |                    |           |                    d+          }d,|_        |                    |           |                    d-          }|                    d.d/           |                    |           |                    d0          }|                    |           t+           |	                    D ]\  9;|                    d1          } tE                      }!|                    |            D ]}|#                    d2          }"3j	                            |"d                   }|"d         |!vrE|                    |"d                   |!|"d         <   |                     |!|"d                             |!                    |"d                   }#t-          ;|"d                   }t          |t          j	        j$                  r|rt          t                    |j%                 j	        D ]V}$|$d3k    r|j&        |#_        tO          ||$          r1|#                    |$tQ          t-          ||$                               W|#                    d4|j)                   qt          |t          j	        j*        t          j	        j+        f          ru|rq|#                    d4|j)                   |D ]S}%|                    d5          }&|&                    d6|%j,                   |%j&        |&_        |#                    |&           Tt          |t          j	        j-                  rA|9|j.                            |d          |#_        |#                    d4|j)                   vtQ           8;|                    |#_        |#                    d41|                    |                    d7tQ          9                     |                    d8tQ          9                     |/                    |0                    |                     n%|d9k    rdd:l1m2}' dd;l3m4}( dd<l3m5}) dd=l3m6}* |'7                                }+| d>}01356789:;<=fd?},|+j8        <d@<_9        g 67rz|                    dAd          }-|                    dBd          :dC  |	          D             }.t+          |-          D ](\  9=|.                    =d          ;;s |,             )n(t+           |	                    D ]\  9; |,             |+:                    |           ntw          dD|           t#          |dE          5 }/4<                                5  |=                    |/dFdFG           ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )IzN
    https://bcrm.carbonsoft.ru/project/Document/DOC-007693#spec-007668-b
    r   N)r   
CmfRoadmapCmfTask)r   returnc                                         | j                  }| j        }t          |t          j        j                  o| j        }t          |t          j        j                  o| j	        }t          |t          j        j                  o| j
        }t          |t          j        j                  o| j        }t
          j                            || j        || j        ||d|d	  	        S )NreadF)	initial_acl_keyobject_modelobject_owner_id	object_idobject_parent_idobject_dictaccess_levelperm_security_level_allowed_idsraise_error)get_model_by_namer   __dict__
issubclasscmfr   	CmfEntityperm_effective_acl_idCmfModelcmf_owner_id	parent_id%perm_security_level_allowed_ids_cacheCmfAccessListcheck_accessr   )objmodelobj_dictr/   obj_owner_idobj_parent_idrA   r   s          r#   check_access_objz*export2file_task.<locals>.check_access_obj;   s    ))#.99<$UCJ,@AA_cF_!%)<==R#BR"5#**=>>P3=0:5#*BV0W0W  1F\_  ]F-#00+#.Zff}(,Q_d	 1 
 
 	
    c              3      K   d}d}d| vrdg| z   } g d}	                      |||z   g| |z   	
          }|sd S ||z  }|D ]} |          r|V  @)Nr   iP  z--)r?   access_authorcmf_author_idperm_security_level_idaccess_responsibleresponsible_id
spectators	executors
project_idr@   r=   rA   T)filterslicefieldsr   r   )slist)rV   startstepsecurity_fieldsdatarowr   rI   clsr   r   s         r#   paginate_dataz'export2file_task.<locals>.paginate_dataJ   s      vVf_F
 
 

	99C$)54<#8$*_$<.>&.	  0 0D
  TME  ##C(( III	rJ   c                    | dS t          | d          rt          | j                  S t          | d          rt          | j                  S t	          | t
                    r!d                    fd| D                       S |rKt          |t          j	        j
        t          j	        j        f          r|j                            | |           S | rt          |           ndS )N r
   r   ,c                 &    g | ]} |          S  rc   ).0r\   convert_vals     r#   
<listcomp>z9export2file_task.<locals>.convert_val.<locals>.<listcomp>j   s#    ===#[[--===rJ   )hasattrstrr
   r   
isinstancelistjoinr:   r;   rV   CmfChoiceInt	CmfChoicechoicesget)val	field_objre   s     r#   re   z%export2file_task.<locals>.convert_valb   s    ;2S&!! 		+sx== S$ 	+sv;;T"" 	+88=======>>> 	+:i#*2I3:K_1`aa 	+$((c222"*3s888*rJ   c                 v    |                     d          D ]"}t          | |          rt          | |          } #| S )u   
        Получить поле объекта. Как getattr, только работает с вложенными полями
        Например: get_included_attr(doc, 'person.second_name')
        r   )splitrg   getattr)rD   	field_strfields      r#   get_included_attrz+export2file_task.<locals>.get_included_attrp   sF    
 __S)) 	* 	*EsE"" *c5))
rJ   fields_namec                 @    fdi }| D ]} |          ||<   |S )Nc           
         |                     d          }| j                            |d                   }ddi}|s`| j        |                                v rEt          t                    || j                          }|j                            |d                   }|}t          t          t                              }t          j        j	        |d<   |r|j
        }t          |          dk    rqt          |d          r|j        r|j        d         }nt          |d          r|j        }n|S | d 	||         d                    |dd                               }|S )	Nr   r   CmfTestplanTestcaseCmfTestcaser<      r   rE   )rs   rV   ro   r   keysvarsr   copyr;   r<   captionlenrg   rE   rk   )
	class_obj
field_namepural_namesrv   linked_entitylinked_class_objres
models_cls
model_nameget_captions
            r#   r   z;export2file_task.<locals>.get_captions.<locals>.get_caption|   sg   $**3//K$((Q88E%}M  DY1]5G5G5I5III#'<<i>R0S#T (/33KNCCCd6ll++J&)j&:J{# 	dm{##a''uh// #EL #%*\!_

 00 #%*[

"
 cc;;z*/EsxxP[\]\^\^P_G`G`#a#accCJrJ   rc   )rx   r   r   r   r]   s      @r#   get_captionsz&export2file_task.<locals>.get_captions{   sO    	 	 	 	 	0 % 	; 	;J)k#z::C
OO
rJ   c                 *    g | ]}|j         	|j        S rc   )visibler   )rd   rv   s     r#   rf   z$export2file_task.<locals>.<listcomp>   s"    ZZZEEMZu'ZZZrJ   timetracker_historyzop_gantt_task.actual_workz.nameuG   Журнал работ.Фактические трудозатратыr   z/export.csvzw+r`   )newline;")	delimiter	quotecharquotingtextresult_text    без htmllxmlxml)ElementTree)Pathz
export.xmlrssversionz0.92channeltitleEvaTeamlinkr&   u+   XML представление данныхlanguagezru-rutaskrX   0
build_infoitemr   r
   r   valuer   endtotalxlsx)workbook)open_workbook)XL_CELL_DATE)xldate_as_tuplez/export.xlsxc            	      "   g } D ]}dk    rW                     
                    |                     |dv r+                     
                    |           d            |          }t          |d           }|                       ||                     |dv rC	                      |                    d          }|                      |j                   dk    r                                                     |            rr         }j        }j        |         }t          |d          |_        |dk    |_	        
                    |d          }|j        d|d	z  z   |j         |_        d S d S d S )
Nr   r   r   r      r}   )r\   column    )appendro   rt   BeautifulSoupr   max_rowrow_dimensionsminoutlineLevelhiddencellr   )csv_rowrv   field_valuerq   soupdepthxl_rowrd
first_cellbs4captionsr]   re   csv_headr   from_roadmaprw   iroadmap_level_ofr\   
sheet_xlsxtids            r#   	write_rowz#export2file_task.<locals>.write_row  s   ( 2 2EAvv U(;(;<<< $;;;$OOx||E/B/B,P,P,PQQQ"3"3C"?"?K 'UD 9 9INN;;{I#F#FGGG 777"00=N=NsTY=Z=Z1[1[]cddty11166%%h///!!'*** T,S1E'/F $26:B&)%mmBO %	BI ",VA!F!FJ!'3.1UQY.?+SAQ+S+S
(((T T 43rJ   u   Выгрузкаroadmap_ordered_idsr   c                 8    i | ]}t          |j                  |S rc   )rh   r   )rd   rD   s     r#   
<dictcomp>z$export2file_task.<locals>.<dictcomp>B  s"    TTT#S[[#TTTrJ   u7   Это формат не поддерживается: rbF)backupmake_preview)N)>r   r   r   r   r   r   ro   boolrj   rV   valuesr:   r;   
CmfRelBaser   tempfileTemporaryDirectoryopenr   writerQUOTE_MINIMAL	enumeratert   r   r   writerow	xml.etreer   pathlibr   Elementsetrequestr   dictrs   CmfRelationBaser   r
   rg   rh   r   
CmfM2MBaseCmfBackrefBaser   rl   rn   write_bytestostringopenpyxlr   xlrdr   r   r   Workbookactiver   r   	Exceptionr   upload_stream_file)>r   r   r   r   r   r   r   r   r"   r^   r   
new_fieldsr   tmpdir	file_pathcsvfiler   r   r   rv   r   rq   r   ETr   r   r   r   r   r&   r   r   r   elementsr   
field_infokeyvr   r   r   r   r   	book_xlsxr   r   	id_to_objfr   r   rI   r]   r   re   r   r   rw   r   r   r\   r   r   s>     `` ``                                         @@@@@@@@@@@@@@r#   r   r   %   sN    JJJ######-L 

v,,z
"C%))->)??J
 
 
 
 
 
 
        0+ + + + + +	 	 	$      <  [ZZSZ5F5F5H5HZZZJ! & &
...4JJZ^^J'' 	"Jsz~~j7Q7QSVS]Sh,i,i 	"'!J*%%%%K|K((H"h..0y,-		$	&	& lS&%!...Iir222 -g


Gs.13;L $ N N'k(B(BCC - -FAs G!, 6 666$OOHLL,?,?@@@$(??? (8<<3F3F0T0T0T U U U&7&7U&C&C$+C$=$=	{{;	'J'JKKK $;;;#&#4#4[[ARARSVX]A^A^5_5_ag#h#hD#NN49555Avv111OOG,,,,)-- - - - - - - - - - - - - - -6 E!!333333$$$$$$VL11I**U##CGGIv&&&jj++GJJwJJw''E"EJNN5!!!::f%%DDINN4   **]33KLKNN;'''**Z00K&KNN;'''::f%%DHHWc"""NN4   L11JNN:&&&#MM+$>$>?? $H $H3zz&))66t$$$"-  H  HJ","2"23"7"7KJNN;q>::E&q>X5535::k!n3M3MQ0H[^$<===!)k!n!=!=J")#k!n"="=K!%)CDD H& E'+F||K4J'K'R X X#&&==6A6FJO$,#*;#<#< !X$.NN3GKQT<U<U8V8V$W$W$W&NN9emDDD#ECJ,A3:C\+]^^ H& 9&NN9emDDD%0 9 9(*

7(;(; %		$ 5 5 5-.V
 * 1 1% 8 8 8 8#E3:+BCC H&.$*/-*;*;K*L*L
"y%-@@@@*-.?.?Z.P.P*Q*Q
"y(:2FGGGGA HD HHUCFF###HHWc!ff%%%!!"++c"2"23333F"" *)))))******)))))),,,,,, ))++I!///I!T !T !T !T !T !T !T !T !T !T !T !T !T !T !T !T !TF #)J1JH  &,jj1F&M&M##)::.@$#G#G TT{9S9STTT	'(;<<    FAs#--T22C ! IKKKK	  (k(B(BCC    FAsIKKKKNN9%%%% cVaccddd)T"" 	Sa $$&& S S--aE-RRRS S S S S S S S S S S S S S S	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	SQlS lS lS lS lS lS lS lS lS lS lS lS lS lS lS lS lS lSs   "f=EK*f=*K.	.f=1K.	2Y"f=f%)ff%ff%ff%f=%f)	)f=,f)	-f==gg)NNNr   FN)NNr   FN)
r   
cmf.configr   
cmf.fieldsr;   r   r   r$   cmf_deferred_jobr   rc   rJ   r#   <module>r      s                        8 GRSimnnn "&!&&+"nS nS nS onnS nS nSrJ   