U
    f*Of(                     @   s>   d dl Z d dlmZ d dlT d dlmZ G dd dejZdS )    N)Path)*)cmf_task_reportc                       sL   e Zd Zdd fdd
Zedeed fddZded
ddZ	  Z
S )CmfTaskReportF)TEXKOM_db_deletec                   sF   t jjdd| g|dD ]}|j|d|i| qt j|d|i|S )Nparent==)filterZinclude_deletedr   )modelsZCmfRepLineChartRowlistdeletesuper)selfr   argskwargsobj	__class__ "./common/models/cmf_task_report.pyr   
   s    zCmfTaskReport.deleteN)all_optionsmodels_filtersc           
         sN   |sg }|dkr2|o| dd }	|	r2|dd|	gg}t j|f|||d|S )Nreport_filter	parent_idr   )r	   models_listobject_fields)getr   field_options_list)
clsZrelation_field_nameZ	object_idr   r   r   r   r	   r   r   r   r   r   r      s    z CmfTaskReport.field_options_listfact)returnc           <         s  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}dddd	d
dddddddddddd
dg}| dddddg | jj}| jj}| j}dd|gg}|r||dd }|dd|g tj }|d krd!nd"}d#d$|gf}t|jr.|d d% |d&|g d't| jjj|g}tj j!||d(}d'dd&|gdd|gdd|gd)d*|gd+d,d gg}t|jr||d&|g tj"j!|dd-d!dd+gd(}t#||r|
 }t#||r|
 }|st$d. d S | } | %d/&dd%d0 'd%|d1d2 &dd3d4 'd3|d5d2 &dd6d7 'd6|d8d2 &dd9d: 'd9|d;d2 &dd<d= 'd<|d>d2 &dd?d@ 'd?|dA|
|j(dB dC}!||||dDD ]4}"&d|!|")dE '|!|d>d2 |!d7 }!qt*dFdG |D }#tj+j!dHd&|#gd"dIgd(}$d}%t, }&d%}'|$D ]։  j-j.jgdJdG  j/jD  }(|j.j|(k})t0 fdKdL|}*dMdG |*D t!t0fdNdL|}+t|+dkrȐqP|'},&|,d% j1 &|,d< j2 |'d7 }'i }-|+D ]}.|.j3|-|.j3j.j< q|-D ]
}/|'}0|-|/ t!t0fdOdL|+}1dPdG |1D t!t0fdQdL|}2&|0d3j1 &|0d% j1 |'d7 }'dRdS }3t4|2|3dTD ]~&|'d3j1 &|'d% j1 j5jrj5jj6dUkr&|'d6j5j1j j6dUkr&|'d6j1j n&|'d9j1 &|'d<j2 t!t0fdVdL|1}4|4D ]}.|.j7j
 }5|5| j8dC }6fdWdX}7|7|'|6|.j9j |7|,|6|.j9j |7|0|6|.j9j |7|'d?|.j9j |7|,d?|.j9j |7|0d?|.j9j |%|.j9jdY 7 }%|5|&krd|&|5< |&|5  |.j9jdY 7  < qN|'d7 }'qqqPdC}!&|'ddZ &|'d?|% ||||dDD ]8}"'|!|d[d2 &|'|!|&:|"
  |!d7 }!qXtj;| j1 d\| j2 d\|<|j=d]d^| t>j?d_}8t@A  |8B  W 5 Q R X |C }9tD|9|8j.j }:|d`krB|:Eda*};tFG|;HfdbdGtIjJD  W 5 Q R X n
| B|: tE|:dc*};t@A  |8jK|;ddddde W 5 Q R X W 5 Q R X W 5 Q R X |8jLS )fNr   )WorkbookColorStyleFontFillFormat)numbers)date	timedeltadatetimetimezone)rruleDAILYcodenameZcache_status_typepriorityZcmf_created_atZcmf_modified_atZ
alarm_dater   zparent.nameresponsiblezresponsible.nameZepicz	epic.namelogic_prefixzparent_task.namezparent_task.logic_prefixft_responsible
date_startdate_endzreport_filter.bqlZreport_type
start_datez>=   )days<r   
cmf_author	cmf_ownerZtimetracker_historyZEXISTS   INZAND)r	   fieldshistory_type=
time_spentz!=zparent.parentu)   Нет задач для экспортаu   Задачиu   Проект   )size   u   Пользователь(      u   Эпик      u   Задача2      u   Код      u   Часы работы   )rC   format   )ZdtstartZuntilz%Y-%m-%dc                 S   s   g | ]}|j jqS r   r   value.0taskr   r   r   
<listcomp>{   s     z-CmfTaskReport.export_time.<locals>.<listcomp>idcmf_owner_assistantsc                 S   s   g | ]}|j jqS r   rV   rQ   )rS   Z	assistantr   r   r   rU      s     c                    s   | j j jjkS Nr   rQ   rV   rT   )projectr   r   <lambda>       z+CmfTaskReport.export_time.<locals>.<lambda>c                 S   s   g | ]}|j jqS r   rX   rR   r   r   r   rU      s     c                    s   | j j kS rY   rP   record)project_tasks_idsr   r   r]      r^   c                    s   | j jj jjkS rY   )r:   rV   rQ   r_   )userr   r   r]      r^   c                 S   s   g | ]}|j jqS r   rP   )rS   r`   r   r   r   rU      s     c                    s   | j j kS rY   rX   r[   )user_tasks_idsr   r   r]      r^   c                 S   s,   | j jr&| j jjdkr&| j jj| j S | jS )N	task.epic)parent_taskrQ   r2   r/   r[   r   r   r   
tasks_sort   s    z-CmfTaskReport.export_time.<locals>.tasks_sort)keyrd   c                    s   | j j jjkS rY   rZ   r_   r[   r   r   r]      r^   c                    s8     | |}|s|d }n||d 7 } | || d S )N<   )get_cell_valueset_cell_value)xyZ	new_valuerQ   wsr   r   update_cell   s
    
z.CmfTaskReport.export_time.<locals>.update_cellrh   u   Всего:
   -z%Y%m%d-%H%M%S.)r/   r   csvwc                    s&   g | ]  fd dt jD qS )c                    s    g | ]}  d  |d  qS )r7   )ri   )rS   col)rowrn   r   r   rU      s     z8CmfTaskReport.export_time.<locals>.<listcomp>.<listcomp>)rangeZnum_columns)rS   rm   )rv   r   rU      s   rbF)ZbackupZsave_preview)MZpyexcelerater!   r"   r#   r$   r%   r&   Zopenpyxl.stylesr'   r*   r(   r)   r+   Zdateutil.rruler,   r-   ostempfileZload_fieldsr4   rQ   r5   r3   appendr
   Z	CmfPersonZget_current_userlenZjsonloadsr   bqlZCmfTaskr   ZCmfTimeTrackerHistory
isinstanceZ	cmf_alertZ	new_sheetrj   Zset_col_styleZFORMAT_NUMBER_00strftimesetZ
CmfProjectdictr;   rV   rW   r	   r/   r.   r:   sortedre   r2   r6   r8   rA   r   ZCmfAttachmentZnowZutcgcurrent_personZcmfutilZdisable_aclZsaveZTemporaryDirectoryr   openrs   writerZ	writerowsrw   Znum_rowsZupload_stream_fileZurl)<r   r?   r~   r>   Zformat_filer!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   ry   rz   r6   Zend_dater1   Z!timetracker_history_exists_filterZend_date_filterr   Zfield_name_filter_respZhistory_restrictZtasks_filterZtasksZrecords_filterZrecordswbru   dZproject_idsZprojectsZitogs_total_time_spentZitogsZnumZ
owners_idsZis_ownerZproject_tasksZproject_recordsZproject_lineZproject_usersr`   rg   Z	user_lineZuser_recordsZ
user_tasksrf   Ztask_recordsZ	hist_dateZcol_numro   Z
attachmentZtemp_dirZ	file_pathfr   )r\   ra   rT   rb   rc   rn   r   export_time    s@    




*






.zCmfTaskReport.export_time)NNNFNN)r   NNN)__name__
__module____qualname__r   classmethodboolr   r   strr   __classcell__r   r   r   r   r      s              r   )rs   pathlibr   Zcmf.includeZcommon.fieldsr   r   r   r   r   r   <module>   s   