U
    bEf'                     @   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                       sB   e Zd Zedeed fddZdd Zdedd	d
Z	  Z
S )CmfTaskReportNF)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_idz==)filtermodels_listobject_fields)getsuperfield_options_list)
clsZrelation_field_nameZ	object_idr   r   r   r   r
   kwargsparent	__class__ "./common/models/cmf_task_report.pyr   	   s    z CmfTaskReport.field_options_listc                 C   s   |    d S N)Z_check_simple_perm)selfr   r   r   check_simple_perm   s    zCmfTaskReport.check_simple_perm)returnc           8         sZ  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d*d+d gg}t|jrt|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/d0}t(j) d1}d2| }|j*+|s|,| | }|-d3.dd"d4 /d"|d5d6 .dd7d8 /d7|d9d6 .dd:d; /d:|d<d6 .dd=d> /d=|d?d6 .dd@dA /d@|dBd6 .ddCdD /dC|dE|	|
j0dF dG}||||dHD ]4} .d|| 1dI /||dBd6 |d7 }qt2dJdK |D }!tj3j dLd$|!gdMdNgd&}"d}#t4 }$d"}%|"D ]j5j6jgdOdK j7jD  }& j6j|&k}'t8fdPdQ|}(dRdK |(D |'rt t8fdSdQ|})nt t8 fdTdQ|})t|)dkrqx|%}*.|*d"j$ .|*d@j% |%d7 }%i }+|)D ]},|,j9|+|,j9j6j< qD|+D ]
}-|%}.|+|- t t8fdUdQ|)}/dVdK |/D t t8fdWdQ|}0.|.d7j$ .|.d"j$ |%d7 }%dXdY }1t:|0|1dZD ]~.|%d7j$ .|%d"j$ j;jr<j;jj<d[kr<.|%d:j;j$j j<d[kr\.|%d:j$j n.|%d=j$ .|%d@j% t t8fd\dQ|/}2|2D ]},|,j=j
 }3|3| j>dG }4fd]d^}5|5|%|4|,j?j |5|*|4|,j?j |5|.|4|,j?j |5|%dC|,j?j |5|*dC|,j?j |5|.dC|,j?j |#|,j?jd_ 7 }#|3|$krBd|$|3< |$|3  |,j?jd_ 7  < q|%d7 }%qq`qxdG}.|%dd` .|%dC|# ||||dHD ]8} /||dad6 .|%||$@| 
  |d7 }qtAjBC D|}6|dbkr>tE|6Fdc}6tG|6dd*}7tHI|7JfdedKtKjLD  W 5 Q R X n
|M|6 tN|6Ot(jPdfS )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)   Нет задач для экспорта-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>w   s     z-CmfTaskReport.export_time.<locals>.<listcomp>id	cmf_ownercmf_owner_assistantsc                 S   s   g | ]}|j jqS r   rO   rJ   )rL   Z	assistantr   r   r   rN   ~   s     c                    s   | j j jjkS r   r	   rJ   rO   rM   )projectr   r   <lambda>       z+CmfTaskReport.export_time.<locals>.<lambda>c                 S   s   g | ]}|j jqS r   rR   rK   r   r   r   rN      s     c                    s   | j j kS r   rI   record)project_tasks_idsr   r   rV      rW   c                    s   | j jko| jj jjkS r   )r	   rJ   Zcmf_author_idrO   rX   )current_personrZ   r   r   rV      s    c                    s   | j jj jjkS r   )r5   rO   rJ   rX   )userr   r   rV      rW   c                 S   s   g | ]}|j jqS r   rI   )rL   rY   r   r   r   rN      s     c                    s   | j j kS r   rR   rT   )user_tasks_idsr   r   rV      rW   c                 S   s,   | j jr&| j jjdkr&| j jj| j S | jS )N	task.epic)parent_taskrJ   r,   r)   rT   r   r   r   
tasks_sort   s    z-CmfTaskReport.export_time.<locals>.tasks_sort)keyr^   c                    s   | j j jjkS r   rS   rX   rT   r   r   rV      rW   c                    s8     | |}|s|d }n||d 7 } | || d S )N<   )get_cell_valueset_cell_value)xyZ	new_valuerJ   wsr   r   update_cell   s
    
z.CmfTaskReport.export_time.<locals>.update_cellrb   u   Всего:
   csvz.csvwc                    s&   g | ]  fd dt jD qS )c                    s    g | ]}  d  |d  qS )r0   )rc   )rL   col)rowrh   r   r   rN      s     z8CmfTaskReport.export_time.<locals>.<listcomp>.<listcomp>)rangeZnum_columns)rL   rg   )rn   r   rN      s   z/files/)QZpyexcelerater   r   r   r   r   r    Zopenpyxl.stylesr!   r$   r"   r#   r%   Zdateutil.rruler&   r'   osZload_fieldsr-   rJ   r.   r/   ZmodelsZ	CmfPersonZget_current_userlenappendZjsonloadsr   bqlZCmfTasklistZCmfTimeTrackerHistory
isinstanceZ	cmf_alertr)   r(   ZnowZutcZconfigZPROJECT_DIRpathexistsmkdirZ	new_sheetrd   Zset_col_styleZFORMAT_NUMBER_00strftimesetZ
CmfProjectdictrP   rO   rQ   r
   r5   sortedr_   r,   r2   r1   r9   r   gr[   Ztmp_dirZjoinpathr   Zwith_suffixopenrk   writerZ	writerowsro   Znum_rowsZsavestrreplaceZ
UPLOAD_DIR)8r   rt   r7   Zformat_filer   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   rp   r2   Zend_dateZend_date_filterr+   Zhistory_restrictZtasks_filterZtasksZrecords_filterZrecords	file_nameZpath_to_tmprw   wbrm   dZproject_idsZprojectsZitogs_total_time_spentZitogsZnumZ
owners_idsZis_ownerZproject_tasksZproject_recordsZproject_lineZproject_usersrY   ra   Z	user_lineZuser_recordsZ
user_tasksr`   Ztask_recordsZ	hist_dateZcol_numri   Zpath_to_filefr   )r[   rU   rZ   rM   r\   r]   rh   r   export_time   s6    
$









zCmfTaskReport.export_time)NNNFNN)NNN)__name__
__module____qualname__classmethodboolr|   r   r   r   r   __classcell__r   r   r   r   r      s              r   )rk   pathlibr   Zcmf.includeZcommon.fieldsr   r   r   r   r   r   <module>   s   