U
    dW"f'                     @   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)returnc           8         sR  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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}||dd }| j}tj  dddd |gdd!|gggf}t|jr|d 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(d gg}t|jrl|d#d$|g tj!j |dd)d#dd'gd&}t"||r|
 }t"||r|
 }|st#d* d S | j$ d+| j% d+|&|j'd,d-}t(j) d.}d/| }|j*+|s|,| | }|-d0.dd"d1 /d"|d2d3 .dd4d5 /d4|d6d3 .dd7d8 /d7|d9d3 .dd:d; /d:|d<d3 .dd=d> /d=|d?d3 .dd@dA /d@|dB|	|
j0dC dD}||||dED ]4} .d|| 1dF /||d?d3 |d7 }qt2dGdH |D }!tj3j dId$|!gdJdKgd&}"d}#t4 }$d"}%|"D ]j5j6jgdLdH j7jD  }& j6j|&k}'t8fdMdN|}(dOdH |(D |'rt t8fdPdN|})nt t8 fdQdN|})t|)dkrqp|%}*.|*d"j$ .|*d=j% |%d7 }%i }+|)D ]},|,j9|+|,j9j6j< q<|+D ]
}-|%}.|+|- t t8fdRdN|)}/dSdH |/D t t8fdTdN|}0.|.d4j$ .|.d"j$ |%d7 }%dUdV }1t:|0|1dWD ]~.|%d4j$ .|%d"j$ j;jr4j;jj<dXkr4.|%d7j;j$j j<dXkrT.|%d7j$j n.|%d:j$ .|%d=j% t t8fdYdN|/}2|2D ]},|,j=j
 }3|3| j>dD }4fdZd[}5|5|%|4|,j?j |5|*|4|,j?j |5|.|4|,j?j |5|%d@|,j?j |5|*d@|,j?j |5|.d@|,j?j |#|,j?jd\ 7 }#|3|$kr:d|$|3< |$|3  |,j?jd\ 7  < q|%d7 }%qqXqpdD}.|%dd] .|%d@|# ||||dED ]8} /||d^d3 .|%||$@| 
  |d7 }qtAjBC D|}6|d_kr6tE|6Fd`}6tG|6da*}7tHI|7JfdbdHtKjLD  W 5 Q R X n
|M|6 tN|6Ot(jPdcS )dNr   )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
date_startdate_endzreport_filter.bqlZreport_typeft_responsible   )daysZtimetracker_historyZEXISTS
start_datez>=<   
cmf_authorINZAND)r	   fields
time_spentz!=zparent.parentu)   Нет задач для экспорта-z%Y%m%d-%H%M%Sz.xlsxz
/files/tmpz/files/tmp/u   Задачиu   Проект   )size   u   Пользователь(      u   Эпик      u   Задача2      u   Код      u   Часы работы   )r@   format   )ZdtstartZuntilz%Y-%m-%dc                 S   s   g | ]}|j jqS r   r   value.0taskr   r   r   
<listcomp>y   s     z-CmfTaskReport.export_time.<locals>.<listcomp>id	cmf_ownercmf_owner_assistantsc                 S   s   g | ]}|j jqS r   rS   rN   )rP   Z	assistantr   r   r   rR      s     c                    s   | j j jjkS Nr   rN   rS   rQ   )projectr   r   <lambda>       z+CmfTaskReport.export_time.<locals>.<lambda>c                 S   s   g | ]}|j jqS r   rV   rO   r   r   r   rR      s     c                    s   | j j kS rW   rM   record)project_tasks_idsr   r   r[      r\   c                    s   | j jko| jj jjkS rW   )r   rN   Zcmf_author_idrS   r]   )current_personr_   r   r   r[      s    c                    s   | j jj jjkS rW   )r:   rS   rN   r]   )userr   r   r[      r\   c                 S   s   g | ]}|j jqS r   rM   )rP   r^   r   r   r   rR      s     c                    s   | j j kS rW   rV   rY   )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_taskrN   r1   r.   rY   r   r   r   
tasks_sort   s    z-CmfTaskReport.export_time.<locals>.tasks_sort)keyrc   c                    s   | j j jjkS rW   rX   r]   rY   r   r   r[      r\   c                    s8     | |}|s|d }n||d 7 } | || d S )N<   )get_cell_valueset_cell_value)xyZ	new_valuerN   wsr   r   update_cell   s
    
z.CmfTaskReport.export_time.<locals>.update_cellrg   u   Всего:
   csvz.csvwc                    s&   g | ]  fd dt jD qS )c                    s    g | ]}  d  |d  qS )r5   )rh   )rP   col)rowrm   r   r   rR      s     z8CmfTaskReport.export_time.<locals>.<listcomp>.<listcomp>)rangeZnum_columns)rP   rl   )rs   r   rR      s   z/files/)QZpyexcelerater    r!   r"   r#   r$   r%   Zopenpyxl.stylesr&   r)   r'   r(   r*   Zdateutil.rruler+   r,   osZload_fieldsr2   rN   r3   r4   r
   Z	CmfPersonZget_current_userlenappendZjsonloadsr   bqlZCmfTaskr   ZCmfTimeTrackerHistory
isinstanceZ	cmf_alertr.   r-   ZnowZutcZconfigZPROJECT_DIRpathexistsmkdirZ	new_sheetri   Zset_col_styleZFORMAT_NUMBER_00strftimesetZ
CmfProjectdictrT   rS   rU   r	   r:   sortedrd   r1   r7   r6   r=   r   gr`   Ztmp_dirZjoinpathr   Zwith_suffixopenrp   writerZ	writerowsrt   Znum_rowsZsavestrreplaceZ
UPLOAD_DIR)8r   ry   r<   Zformat_filer    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   ru   r7   Zend_dateZend_date_filterr0   Zhistory_restrictZtasks_filterZtasksZrecords_filterZrecords	file_nameZpath_to_tmpr{   wbrr   dZproject_idsZprojectsZitogs_total_time_spentZitogsZnumZ
owners_idsZis_ownerZproject_tasksZproject_recordsZproject_lineZproject_usersr^   rf   Z	user_lineZuser_recordsZ
user_tasksre   Ztask_recordsZ	hist_dateZcol_numrn   Zpath_to_filefr   )r`   rZ   r_   rQ   ra   rb   rm   r   export_time    s4    
$









zCmfTaskReport.export_time)NNNFNN)NNN)__name__
__module____qualname__r   classmethodboolr   r   r   r   __classcell__r   r   r   r   r      s              r   )rp   pathlibr   Zcmf.includeZcommon.fieldsr   r   r   r   r   r   <module>   s   