U
    7-f7(                     @   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         sl  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
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d*d+d gg}t|jr||d#d$|g tj"j!|dd,d#dd*gd&}t#||r|
 }t#||r|
 }|st$d- d S | }|%d.&dd"d/ 'd"|d0d1 &dd2d3 'd2|d4d1 &dd5d6 'd5|d7d1 &dd8d9 'd8|d:d1 &dd;d< 'd;|d=d1 &dd>d? 'd>|d@|	|
j(dA dB}||||dCD ]4}&d||)dD '||d=d1 |d7 }qt*dEdF |D }tj+j!dGd$|gdHdIgd&} d}!t, }"d"}#| D ]j-j.jgdJdF j/jD  }$ j.j|$k}%t0fdKdL|}&dMdF |&D |%rt!t0fdNdL|}'nt!t0 fdOdL|}'t|'dkrƐq.|#}(&|(d"j1 &|(d;j2 |#d7 }#i })|'D ]}*|*j3|)|*j3j.j< q|)D ]
}+|#},|)|+ t!t0fdPdL|'}-dQdF |-D t!t0fdRdL|}.&|,d2j1 &|,d"j1 |#d7 }#dSdT }/t4|.|/dUD ]~&|#d2j1 &|#d"j1 j5jrj5jj6dVkr&|#d5j5j1j j6dVkr&|#d5j1j n&|#d8j1 &|#d;j2 t!t0fdWdL|-}0|0D ]}*|*j7j
 }1|1| j8dB }2fdXdY}3|3|#|2|*j9j |3|(|2|*j9j |3|,|2|*j9j |3|#d>|*j9j |3|(d>|*j9j |3|,d>|*j9j |!|*j9jdZ 7 }!|1|"krd|"|1< |"|1  |*j9jdZ 7  < qL|#d7 }#qqq.dB}&|#dd[ &|#d>|! ||||dCD ]8}'||d\d1 &|#||":|
  |d7 }qVtj;| j1 d]| j2 d]|<|j=d^d_| t>j?d`}4|4@  |A }5tB|5|4j.j }6|dakr,|6Cdb*}7tDE|7FfdcdFtGjHD  W 5 Q R X n
|@|6 tC|6dd}7|4jI|7dededf W 5 Q R X W 5 Q R X |4jJS )gNr   )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	   fieldsZhistory_type=Zfact
time_spentz!=zparent.parentu)   Нет задач для экспорта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>u   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   Всего:
   -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 )r5   )rh   )rP   col)rowrm   r   r   rR      s     z8CmfTaskReport.export_time.<locals>.<listcomp>.<listcomp>)rangeZnum_columns)rP   rl   )ru   r   rR      s   rbF)ZbackupZsave_preview)KZpyexcelerater    r!   r"   r#   r$   r%   Zopenpyxl.stylesr&   r)   r'   r(   r*   Zdateutil.rruler+   r,   ostempfileZload_fieldsr2   rN   r3   r4   r
   Z	CmfPersonZget_current_userlenappendZjsonloadsr   bqlZCmfTaskr   ZCmfTimeTrackerHistory
isinstanceZ	cmf_alertZ	new_sheetri   Zset_col_styleZFORMAT_NUMBER_00strftimesetZ
CmfProjectdictrT   rS   rU   r	   r.   r-   r:   sortedrd   r1   r7   r6   r>   r   ZCmfAttachmentZnowZutcgr`   ZsaveZTemporaryDirectoryr   openrr   writerZ	writerowsrv   Znum_rowsZupload_stream_fileZurl)8r   r}   r<   Zformat_filer    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   rx   ry   r7   Zend_dateZend_date_filterr0   Zhistory_restrictZtasks_filterZtasksZrecords_filterZrecordswbrt   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
attachmentZtemp_dirZ	file_pathfr   )r`   rZ   r_   rQ   ra   rb   rm   r   export_time    s:    




*




$zCmfTaskReport.export_time)NNNFNN)NNN)__name__
__module____qualname__r   classmethodboolr   r   strr   __classcell__r   r   r   r   r      s              r   )rr   pathlibr   Zcmf.includeZcommon.fieldsr   r   r   r   r   r   <module>   s   