
    =j>-                     T    d dl Z d dlmZ d dlT d dlmZ  G d dej                  ZdS )    N)Path)*)cmf_task_reportc                   |     e Zd Zej        j        dgz   Zdd fd
Ze	 	 ddede	f fd            Z
dd
efdZ xZS )CmfTaskReportexport_timeF)TEXKOM_db_deletec                    t           j                            dd| g|          D ]} |j        |d|i|  t	                      j        |d|i|S )Nparent==)filterinclude_deletedr	   )modelsCmfRepLineChartRowlistdeletesuper)selfr	   argskwargsobj	__class__s        "./common/models/cmf_task_report.pyr   zCmfTaskReport.delete   ss    ,11(D$9Oaq1rr 	K 	KCCJJ/?J6JJJJuww~tQ6FQ&QQQ    Nall_optionsmodels_filtersc                     |sg }|dk    r!|o|                     dd           }	|	r|dd|	gg} t                      j        |f|||d|S )Nreport_bql_filter	parent_idr   )r   models_listobject_fields)getr   field_options_list)clsrelation_field_name	object_idr!   r    r   r   r   r   r   r   s             r   r#   z CmfTaskReport.field_options_list   s      	F"555"K}'8'8d'K'KF ? ;f"=>)uww)*= QfZe8EQ QIOQ Q 	Qr   factreturnc           
      F  @ABCDE ddl m}m}m}m}m}	m}
 ddlm} ddl	m
}m}m	}m} ddlm}m} dd l}dd l}t$          j                            d| j        d||||d| | j        | j        d	d
           g d}|                     g d           | j        j        }| j        j        }d }| j        }|rdd|ggng }|r'| |d          z   }|                    dd|g           t$          j                                        }|dk    rdnd}d }|rdd|gf}tA          |j                  r&|r$|d         d                             |d|g           tB          "                    | j#        j$        j!                  g}|r|                    |           dg|z   }t$          j%        &                    ||          }dd|gdd|gdd|gdd|gg}d |D             } |                     g d            dg| z   }!tA          |j                  r|!                    |d|g           t$          j'        &                    |!g d!          }"tQ          ||          r|
                                }tQ          ||          r|
                                }|stS          d"            |            }#|#*                    d#          EE+                    ddd$           E,                    d |d%&                     E+                    dd'd(           E,                    d' |d)&                     E+                    dd*d+           E,                    d* |d,&                     E+                    dd-d.           E,                    d- |d/&                     E+                    dd0d1           E,                    d0 |d2&                     E+                    dd3d4           E,                    d3 |d5 |
|j-                  6                     d7}$g }%|p%|.                                
                                }|r ||||8          }%n |||d9:          }%|%D ]Q}&E+                    d|$|&/                    d;                     E,                    |$ |d2&                     |$dz  }$Rta          d< |D                       }'t$          j1        &                    d=d|'gdd>g          }(d})te                      }*d}+|(D ]@@j3        j4        j        gd? @j5        j        D             z   },|j4        j        |,v }-tm          @fd@|          }.dA |.D             AtM          tm          AfdB|"                    }/tA          |/          dk    r|+}0E+                    |0d@j                   E+                    |0d0@j                   |+dz  }+i }1|/D ]}2|2j7        |1|2j7        j4        j        <   |1D ]}3|+}4|1|3         CtM          tm          CfdC|/                    }5dD |5D             DtM          tm          DfdE|                    }6E+                    |4d'Cj                   E+                    |4d@j                   |+dz  }+dF }7tq          |6|7G          D ]BE+                    |+d'Cj                   E+                    |+d@j                   Bj9        j        r;Bj9        j        j:        dHk    r&E+                    |+d*Bj9        j        j                   Bj:        dHk    r"E+                    |+d*Bj        j                   nE+                    |+d-Bj                   E+                    |+d0Bj                   tM          tm          BfdI|5                    }8|8D ]}2|2j;        j        
                                }9|9|z
  j<        d7z   }:EfdJ}; |;|+|:|2j=        j                    |;|0|:|2j=        j                    |;|4|:|2j=        j                    |;|+d3|2j=        j                    |;|0d3|2j=        j                    |;|4d3|2j=        j                   |)|2j=        j        dKz  z  })|9|*vrd|*|9<   |*|9xx         |2j=        j        dKz  z  cc<   |+dz  }+d7}$E+                    |+ddL           E+                    |+d3|)           |%D ]c}&E,                    |$ |dM&                     E+                    |+|$|*>                    |&
                                                     |$dz  }$dt$          ?                    | j         dN| j         dN|.                    |j@                  dOdP| t          jB        Q          }<t          D                                5  |<E                                 d d d            n# 1 swxY w Y   |F                                5 }=t          |=          |<j4        j        z  }>|dRk    rs|>H                    dS          5 }?t          jJ        |?          K                    EfdTt          EjM                  D                        d d d            n# 1 swxY w Y   n|#E                    |>           t          |>dU          5 }?t          D                                5  |<N                    |?d
d
V           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            n# 1 swxY w Y   |<jO        S )WNr   )WorkbookColorStyleFontFillFormat)numbers)date	timedeltadatetimetimezone)rruleDAILYexportr   )typehistory_typebqlfieldsformat_fileokF)operatecmf_model_name
audit_datar   parent_nameparent_coderesult_statusignore_transaction)codenamecache_status_typeprioritycmf_created_atcmf_modified_at
alarm_dater   zparent.nameresponsiblezresponsible.nameepicz	epic.namelogic_prefixzparent_task.namezparent_task.logic_prefixrI   ft_responsible)
date_startdate_endzreport_bql_filter.bqlreport_typerO   
start_datez>=   )days<r'   
cmf_author	cmf_ownertimetracker_historyEXISTS   INAND)r   r;   r   r9   =c                     g | ]}d |v|	S N ).0	conditions     r   
<listcomp>z-CmfTaskReport.export_time.<locals>.<listcomp>j   s#    ^^^YT]H]H]yH]H]H]r   )
time_spentz!=N)r   zparent.parentrW   rS   re   u)   Нет задач для экспортаu   Задачиu   Проект   )size   u   Пользователь(      u   Эпик      u   Задача2      u   Код      u   Часы работы   )rg   format   )dtstartuntilim  )rt   countz%Y-%m-%dc                 &    g | ]}|j         j        S ra   r   valuerb   tasks     r   rd   z-CmfTaskReport.export_time.<locals>.<listcomp>   s    BBBD4>/BBBr   idcmf_owner_assistantsc                 &    g | ]}|j         j        S ra   r|   ry   )rb   	assistants     r   rd   z-CmfTaskReport.export_time.<locals>.<listcomp>   s0      9A  9A  9APY9K  9A  9A  9Ar   c                 8    | j         j        j        j        k    S r`   r   ry   r|   )r{   projects    r   <lambda>z+CmfTaskReport.export_time.<locals>.<lambda>   s    0D
HX0X r   c                 &    g | ]}|j         j        S ra   r   rz   s     r   rd   z-CmfTaskReport.export_time.<locals>.<listcomp>   s     I I I4 I I Ir   c                      | j         j        v S r`   rx   )recordproject_tasks_idss    r   r   z+CmfTaskReport.export_time.<locals>.<lambda>   s    9I9OSd9d r   c                 B    | j         j        j        j        j        k    S r`   )rW   r|   ry   )r   users    r   r   z+CmfTaskReport.export_time.<locals>.<lambda>   s    &:K:N:TX\X_Xe:e r   c                 &    g | ]}|j         j        S ra   rx   )rb   r   s     r   rd   z-CmfTaskReport.export_time.<locals>.<listcomp>   s    !T!T!TV&"2"8!T!T!Tr   c                      | j         j        v S r`   r   )r{   user_tasks_idss    r   r   z+CmfTaskReport.export_time.<locals>.<lambda>   s    dgm~6U r   c                     | j         j        r.| j         j        j        dk    r| j         j        j        | j        z   S | j        S )N	task.epic)parent_taskry   rN   rF   )r{   s    r   
tasks_sortz-CmfTaskReport.export_time.<locals>.tasks_sort   sC    '- G$2B2H2UYd2d2d#/4:TYFF9$r   )keyr   c                 8    | j         j        j        j        k    S r`   r   )r   r{   s    r   r   z+CmfTaskReport.export_time.<locals>.<lambda>   s    f>N>TX\X_Xe>e r   c                                          | |          }|s|dz  }n||dz  z  }                    | ||           d S )N<   )get_cell_valueset_cell_value)xy	new_valuery   wss       r   update_cellz.CmfTaskReport.export_time.<locals>.update_cell   sW    $&$5$5a$;$;E#( 8(1B %R 7--aE:::::r   r   u   Всего:
   -z%Y%m%d-%H%M%S.)rF   r   csvwc                 T    g | ]#fd t          j                  D             $S )c                 H    g | ]}                     d z   |d z             S )rT   )r   )rb   colrowr   s     r   rd   z8CmfTaskReport.export_time.<locals>.<listcomp>.<listcomp>  s1    bbbSR..sQwa@@bbbr   )rangenum_columns)rb   r   r   s    @r   rd   z-CmfTaskReport.export_time.<locals>.<listcomp>  sN        # cbbbbERTR`LaLabbb  r   rb)backupsave_preview)Ppyexcelerater*   r+   r,   r-   r.   r/   openpyxl.stylesr0   r3   r1   r2   r4   dateutil.rruler5   r6   ostempfiler   CmfAuditaudit_event
class_namerF   rE   load_fieldsrP   ry   rQ   rO   append	CmfPersonget_current_userlenjsonloadsr   r:   CmfTaskr   CmfTimeTrackerHistory
isinstance	cmf_alert	new_sheetr   set_col_styleFORMAT_NUMBER_00nowstrftimeset
CmfProjectdictrX   r|   r}   r   rW   sortedr   rN   rS   rU   re   r"   CmfAttachmentutcgcurrent_personcmfutildisable_aclsaveTemporaryDirectoryr   openr   writer	writerowsr   num_rowsupload_stream_fileurl)Fr   r9   r:   r;   r<   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r   r   rS   end_dateend_date_filterrL   !timetracker_history_exists_filterr   field_name_filter_resphistory_restrictprepare_task_filtertasks_filtertasks
conditionsfiltered_conditionsrecords_filterrecordswbr   datesdproject_idsprojectsitogs_total_time_spentitogsnum
owners_idsis_ownerproject_tasksproject_recordsproject_lineproject_usersr   r   	user_lineuser_records
user_tasksr   task_records	hist_datecol_numr   
attachmenttemp_dir	file_pathfr   r   r{   r   r   r   sF                                                                   @@@@@@r   r   zCmfTaskReport.export_time#   s   KKKKKKKKKKKKKKKK++++++@@@@@@@@@@@@////////			##HT_$1,WZ&,[J J	Y]rw 	$ 	y 	y 	y

 
 
( 	mmmnnn_*
=&)R\,dlD*-M,N,Nbd) 	[&):):)::O-44lC5YZZZ)::<<1=1G1G[, 	e 5xAbcd{ !! 	V&6 	VAq!((*@$)TUUU#zz$*@*D*IJJK 	9&&'7888w!44##<#GG tU#4,30S,/	

 _^*^^^""#=#=#=>>>#66{ !! 	N  "8$!LMMM.33!XXX 4 Z Z j(++ 	+#**Jh)) 	'}}H 	CABBB XZZ\\.))
!Q///
EErNNN+++
!Q :;;;
EErNNN+++
!Q
+++
EErNNN+++
!Q///
EErNNN+++
!Q)))
EErNNN+++
!Q 7888
EEr&&9Q2R2RSSSTTT88<<>>#6#6#8#8
 	@E%8DDDEEE%3???E 	 	Aaajj&<&<===S%%R...1111HCCBBEBBBCC$))$k1JT_awSx)yy!" P	 P	G!+.45  9A  9A]d]y]  9A  9A  9A  AJ%(.*<H"#X#X#X#XZ_``M I I= I I I #6*d*d*d*dfm#n#nooO?##q((LlAw|<<<lAw|<<<1HCM) N N<B<Mf/2899$ : :	$S)#F+e+e+e+egv$w$wxx!T!T|!T!T!T!&)U)U)U)UW\"]"]^^
!!)Q	:::!!)Q===q% % % #::>>> ) )D%%c1di888%%c1gl;;;'- O$2B2H2UYd2d2d))#q$2B2G2MNNN(K77))#q$)/BBBB))#q$)<<<%%c1di888 $(/e/e/e/egs(t(t#u#uL". I I$*$5$;$@$@$B$B	#,z#9"?!"C; ; ; ; ; $C&2C2IJJJ#L'6;L;RSSS#Iw8I8OPPP#CF,=,CDDD#L!V5F5LMMM#Iq&2C2IJJJ.&2C2IB2NN.$E11/0E),i(((F,=,Cb,HH((((1HCCS)#:x 
#q-000
#q"8999 	 	AS%%R...111c3		!&&(((;(;<<<1HCC))$)  0C  0Cdi  0C  0C(,,W_WcJdJd  0C  0C  0C  vA  0C  0C121A * C C
   "" 	 	OO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	((** 	WhX)<<Ie##^^C(( AJqMM++   ',R['9'9                   	"""i&& W!((** W W11!EPU1VVVW W W W W W W W W W W W W W WW W W W W W W W W W W W W W W	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W" ~s   )g

gg)8l!Ai3'l3i7	7l:i7	;)l$k:>k#k:#k''k:*k'+k:.l:k>	>lk>	lll)NNNFNN)r'   NNN)__name__
__module____qualname__r   r   api_methodsr   classmethodboolr   r#   strr   __classcell__)r   s   @r   r   r      s        !/;?
 
K .3 R R R R R R R
 VZKOQ QQ7;Q Q Q Q Q [Q o o[^ o o o o o o o or   r   )r   pathlibr   cmf.includecommon.fieldsr   r   ra   r   r   <module>r     s    



           ) ) ) ) ) )J J J J JO1 J J J J Jr   