
    iR                         d dl mZ 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 Zd Zd Zd Zd ZdS )    )defaultdict)*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                   123456789:;<=>?@ABC ddl 1ddlm5 | dk    ::rd} dddd	d
9t          t                    |          4t          j                            |          }dt          f5fd334fd}	dU6fd	6d ;dt          f49fd}
s#d 4j	        
                                D             t                      }:r|                    d           t                      }D ]}:r|dk    r|                    g d           nd|dk    rd}d9d<   nV4j	                            |          r<t          4j	                            |          t          j	        j                  r|dz  }|                    |           | |
          2t!          j                    5 }|dk    r| d}t%          |dd          5 }ddl}|                    |d d!|j        "          }g 7t-           |	                    D ]\  <@g }D ]}<dk    rW7                    2                    |                     |d#v r+7                    2                    |           d$            ;@|          }t/          4|d          }|                     6||                     |d#v rC1                     6 ;@|                    d%          }|                    |j                   <dk    r|                    7           |                    |           	 ddd           n# 1 swxY w Y   n|d&k    r!dd'lm} dd(lm}  ||d)          }|                    d*          }|                     d+d,           |                    d-          }|                    |           |                    d.          }d/|_        |                    |           |                    d0          }tB          j"        |_        |                    |           |                    d1          }d2|_        |                    |           |                    d3          }d4|_        |                    |           |                    d5          }|                     d6d7           |                    |           |                    d8          } |                    |            t-           |	                    D ]\  <@|                    d9          }!tG                      }"|                    |!           D ]}|$                    d:          }#4j	                            |#d                   }|#d         |"vrE|                    |#d                   |"|#d         <   |!                    |"|#d                             |"                    |#d                   }$t/          @|#d                   }t          |t          j	        j%                  r|rt          t                    |j&                 j	        D ]V}%|%d;k    r|j'        |$_        tQ          ||%          r1|$                     |%tS          t/          ||%                               W|$                     d<|j*                   qt          |t          j	        j+        t          j	        j,        f          ru|rq|$                     d<|j*                   |D ]S}&|                    d=          }'|'                     d>|&j-                   |&j'        |'_        |$                    |'           Tt          |t          j	        j.                  rA|9|j/                            |d          |$_        |$                     d<|j*                   vtS           ;@|                    |$_        |$                     d<2|                    |                     d?tS          <                     |                     d@tS          <                     |0                    |1                    |                     n|dAk    rddBl2m3}( ddCl4m5}) ddDl4m6}* ddEl4m7}+ |(8                                },| dF}124678:;<=>?@ABCfdG}-|,j9        BdHB_:        g 7:rtG                      8tG                      =dIv sdJv rtw                      \  8=|                    dKg           }.|                    dLtG                                >|                    dMtG                                ?dN  |	|z             D             }/d<t-          |.dOP          D ]-\  AC|/                    Cd          @@s |-             <dOz  <.n(t-           |	                    D ]\  <@ |-             |,<                    |           nt{          dQ|           t%          |dR          5 }05>                                5  |?                    |0dSdST           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 )VzN
    https://bcrm.carbonsoft.ru/project/Document/DOC-007693#spec-007668-b
    r   N)r   
CmfRoadmapCmfTasku   Индикаторыu   №u   Предшественникиu   Последлователи)custom_column_indicatorscustom_column_sequence_numbercustom_column_predecessorscustom_column_followers)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_dictr4   obj_owner_idobj_parent_idrF   r   s          r$   check_access_objz*export2file_task.<locals>.check_access_objD   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  --)rD   access_authorcmf_author_idperm_security_level_idaccess_responsibleresponsible_id
spectators	executors
project_idrE   rB   rF   T)filterslicefieldsr   r   )slist)r\   startstepsecurity_fieldsdatarowr   rN   clsr   r   s         r$   paginate_dataz'export2file_task.<locals>.paginate_dataS   s      vVf_F
 
 

	99C$)54<#8$*_$<.>&.	  0 0D
  TME  ##C(( III	rO   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  ri   ).0rb   convert_vals     r$   
<listcomp>z9export2file_task.<locals>.convert_val.<locals>.<listcomp>s   s#    ===#[[--===rO   )hasattrstrr   r   
isinstancelistjoinr?   r@   r\   CmfChoiceInt	CmfChoicechoicesget)val	field_objrk   s     r$   rk   z%export2file_task.<locals>.convert_valk   s    ;2S&!! 		+sx== S$ 	+sv;;T"" 	+88=======>>> 	+:i#*2I3:K_1`aa 	+$((c222"*3s888*rO   c                 v    |                     d          D ]"}t          | |          rt          | |          } #| S )u   
        Получить поле объекта. Как getattr, только работает с вложенными полями
        Например: get_included_attr(doc, 'person.second_name')
        r	   )splitrm   getattr)rI   	field_strfields      r$   get_included_attrz+export2file_task.<locals>.get_included_attry   sF    
 __S)) 	* 	*EsE"" *c5))
rO   fields_namec                 B    fdi }| D ]} |          ||<   |S )Nc           
         |	v r	|         S |                     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CmfTestcaserA      r   rJ   )ry   r\   ru   r   keysvarsr   copyr@   rA   captionlenrm   rJ   rq   )	class_obj
field_namepural_namesr|   linked_entitylinked_class_objres
models_cls
model_nameforced_captionsget_captions            r$   r   z;export2file_task.<locals>.get_captions.<locals>.get_caption   s}   _,,&z22$**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JrO   ri   )r~   r   r   r   rc   r   s      @r$   get_captionsz&export2file_task.<locals>.get_captions   sT    	 	 	 	 	 	6 % 	; 	;J)k#z::C
OO
rO   c                 *    g | ]}|j         	|j        S ri   )visibler   )rj   r|   s     r$   rl   z$export2file_task.<locals>.<listcomp>   s"    ZZZEEMZu'ZZZrO   r.   r-   )z op_gantt_task.actual_finish_datezop_gantt_task.sched_finish_datez"op_gantt_task.constrain_start_typez"op_gantt_task.constrain_start_datez#op_gantt_task.constrain_finish_typez#op_gantt_task.constrain_finish_datetimetracker_historyzop_gantt_task.actual_workuG   Журнал работ.Фактические трудозатратыz.namer   z/export.csvzw+rf   )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taskr^   0
build_infoitemr	   r   r   valuer   endtotalxlsx)workbook)open_workbook)XL_CELL_DATE)xldate_as_tuplez/export.xlsxc            	      4   g } D ]}dk    rW                                         |                     |dv r+                                         |           d           r|dk    r|                      dz              rS|dk    rM                    g           }fd|D             }|                      d                    |                     ։rT|d	k    rN                    g           }fd
|D             }|                      d                    |                     ,r*|dk    r$|                      t                               X |          }t	          |d           }|                       ||                     |dv rC                      |                    d          }|                      |j                   ݉dk    r                                                     |            rt          f                   }	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/   c                 V    g | ]%}t                              |d                     &S Nrn   ru   rj   tidroadmap_sequence_maps     r$   rl   z7export2file_task.<locals>.write_row.<locals>.<listcomp>7  s5    ;};};}ilC@T@X@XY\^b@c@c<d<d;};};}rO   z; r0   c                 V    g | ]%}t                              |d                     &S r   r   r   s     r$   rl   z7export2file_task.<locals>.write_row.<locals>.<listcomp>;  s5    8w8w8wfi=Q=U=UVY[_=`=`9a9a8w8w8wrO   r-   r      )rb   column    )appendru   rq   _indicator_textrz   BeautifulSoupr   rn   max_rowrow_dimensionsminoutlineLevelhiddencellr   )csv_rowr|   predecessors sequence_numbers_of_predecessors	followerssequence_numbers_of_followersfield_valuerw   soupdepthxl_rowrd
first_cellbs4captionsrc   rk   csv_headr   followers_offrom_roadmapr}   ipredecessors_ofroadmap_level_ofr   rb   seq
sheet_xlsxr   s                r$   	write_rowz#export2file_task.<locals>.write_row*  s   ( 6 6EAvv U(;(;<<< $;;;$OOx||E/B/B,P,P,PQQQ# 61P(P(Pqs++++% 6%3O*O*O'6':':3'C'C;};};};}p|;};};}8tyy1Q'R'RSSSS% 6%3L*L*L$0$4$4S"$=$=	8w8w8w8wmv8w8w8w5tyy1N'O'OPPPP% 	6%3M*M*Ms';';<<<<&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66%%h///!!'*** T,S#s__=E'/F $26:B&)%mmBO %	BI ",VA!F!FJ!'3.1UQY.?+SAQ+S+S
(((T T 43rO   u   Выгрузкаr/   r0   roadmap_ordered_idsr   r   c                 8    i | ]}t          |j                  |S ri   )rn   r   )rj   rI   s     r$   
<dictcomp>z$export2file_task.<locals>.<dictcomp>f  s"    hhh#S[[#hhhrO   r   )r^   u7   Это формат не поддерживается: rbF)backupmake_previewr   )@r   r   r   r   r   r   ru   boolrp   r\   valuesr   extendr?   r@   
CmfRelBasetempfileTemporaryDirectoryopenr   writerQUOTE_MINIMAL	enumeraterz   r   r   writerow	xml.etreer   pathlibr   Elementsetrequestr    dictry   CmfRelationBaser   r   rm   rn   r   
CmfM2MBaseCmfBackrefBaser   rr   rt   write_bytestostringopenpyxlr   xlrdr   r   r   Workbookactiver   $_prepare_predecessors_followers_mapsr   	Exceptionr   upload_stream_file)Dr   r   r   r   r   r   r   r   r#   rd   r   
new_fieldsadditional_fieldsr   tmpdir	file_pathcsvfiler   r   r   r|   r   rw   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   rN   rc   r   rk   r   r   r   r   r}   r   r   r   r   rb   r   r   r   sD     `` ``                                          @@@@@@@@@@@@@@@@@@@r$   r   r   '   sd    JJJ######-L 
 %;).&F#A	 O v,,z
"C%))->)??J
 
 
 
 
 
 
        0+ + + + + +	 	 	$       B  [ZZSZ5F5F5H5HZZZJ ;9:::! 
& 
&
 	"J*DDD$$ &t &t &t u u u u 0004J <EO788Z^^J'' 	"Jsz~~j7Q7QSVS]Sh,i,i 	"'!J*%%%%K|K((H		$	&	& @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 .T .T .T .T` #)J1JH  #vv"&&&/;>>B[_jBjBj4X4Z4Z1L/&,jj1F&K&K##)::.@$&&#I#I '-zz2H$&&'Q'Q$hh{UfGf9g9ghhh	 )*=Q G G G  HC#--T22C ! IKKKFAA (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y@S @S @S @S @S @S @S @S @S @S @S @S @S @S @S @S @S @Ss   0i>EL8,i>8L<	<i>?L<	 [i>i&*ii&ii&ii&i>&i*	*i>-i*	.i>>jjc                  F   t          t                    } t          t                    }g d}g d}t          j                            ||          D ]L}| |j                                     |j                   ||j                                     |j                   M| |fS )N)rQ   out_link_id
in_link_id)zrelation_type.codez==zsystem.finish:start)r\   rZ   )r   rp   r   CmfRelationOptionr]   r  r   r  )r   r   _fields_filterrels        r$   r  r    s    t$$L!$''O///G???G'--WW-MM @ @S_%,,S^<<<'..s????((rO   c                 :    dddd}|                     | |           S )Nu   Фиксированная   Не раньше   Не позже0-constz3-afterz4-beforeru   )codestart_restriction_names     r$   _get_start_restriction_labler"    s0    3*) 
 "%%dD111rO   c                 :    dddd}|                     | |           S )Nu   Фиксированныйr  r  r  z1-afterz2-beforer  )r   finish_restriction_lables     r$   _get_finish_restriction_labler&    s0    3*)   
 $''d333rO   c                    t          | t          j                  r|                     d          S t          | t          j                  r8t          j        | j        | j        | j                                      d          S dS )Nz%d.%m.%Yrf   )ro   r   r   dateyearmonthday)ds    r$   _format_dater-    sl    !X&'' &zz*%%%!X]## N !%88AA*MMM2rO   c                    t          | dd           }|sdS t          |dd           }|rdt          |           dS g }t          |dd           }|dv rSt          |          }d| d	}t          |d
d           }|r|dt          |           dz  }|                    |           t          |dd           }|dv rSt	          |          }d| d}t          |dd           }	|	r|dt          |	           dz  }|                    |           t          | dd           }
t          |dd           }|r.|
r,||
k    r&|                    dt          |
           d           d                    |          S )Nop_gantt_taskrf   actual_finish_dateu   Была завершена "r   constrain_start_typer  u/   Установлено ограничение "u    " для "Дата начала"constrain_start_dateu    на "constrain_finish_typer$  u&   " для "Дата окончания"constrain_finish_datedeadlinesched_finish_dateuS   Указана дата окончания позже крайнего срока "
)rz   r-  r"  r   r&  rq   )instance
gantt_taskactual_finishlines	cst_valuelabellinecsd	cft_valuecfdr5  sched_finishs               r$   r   r     s   ?D99J r J(<dCCM NM|M/J/JMMMME 
$:DAAI666,Y77hhhhj"8$?? 	32l3//2222DT 
$;TBBI555-i88nnnnj"94@@ 	32l3//2222DT xT22H:':DAAL F F\H%<%<  Ekw  yA  lB  lB  E  E  E  	F  	F  	F99UrO   )NNNr   FN)NNr   FN)collectionsr   r   
cmf.configr   
cmf.fieldsr@   r   r   r%   cmf_deferred_jobr   r  r"  r&  r-  r   ri   rO   r$   <module>rG     s   # # # # # #                     8 GRSimnnn "&!&&+"RS RS RS onRSn
) ) )2 2 24 4 4  ' ' ' ' 'rO   