U
    _d#%                     @   s*   d dl T d dlmZ G dd dejZdS )    )*)cmf_task_reportc                       sL   e Zd Zedeed fddZdd Zd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   Уведомлениеc                 O   s   d S r   r   )r   textZnotify_nameargsr   r   r   r   all_place_notify   s    zCmfTaskReport.all_place_notify)returnc           6         s  ddl m}m}m}m}m}m}	 ddlm}
 ddl	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rf|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,}t%j& d-}d.| }|j'(|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j0jdHd$| gdIdJgd&}!d}"t1 }#d"}$|!D ]j2j3jgdKdG j4jD  }% j3j|%k}&t5fdLdM|}'dNdG |'D |&rtt5fdOdM|}(ntt5 fdPdM|}(t|(dkrqZ|$})+|)d"j# +|)d<j$ |$d7 }$i }*|(D ]}+|+j6|*|+j6j3j< q&|*D ]
},|$}-|*|, tt5fdQdM|(}.dRdG |.D tt5fdSdM|}/+|-d3j# +|-d"j# |$d7 }$dTdU }0t7|/|0dVD ]~+|$d3j# +|$d"j# j8jrj8jj9dWkr+|$d6j8j#j j9dWkr>+|$d6j#j n+|$d9j# +|$d<j$ tt5fdXdM|.}1|1D ]}+|+j:j
 }2|2| j;dC }3fdYdZ}4|4|$|3|+j<j |4|)|3|+j<j |4|-|3|+j<j |4|$d?|+j<j |4|)d?|+j<j |4|-d?|+j<j |"|+j<jd[ 7 }"|2|#kr$d|#|2< |#|2  |+j<jd[ 7  < qx|$d7 }$qʐqBqZdC}+|$dd\ +|$d?|" ||||dDD ]8},||d]d2 +|$||#=|
  |d7 }q| d^| }5|>|5 |S )_Nr   )WorkbookColorStyleFontFillFormat)numbers)date	timedeltadatetime)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.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   rP   rK   )rM   Z	assistantr   r   r   rO   ~   s     c                    s   | j j jjkS r   r   rK   rP   rN   )projectr   r   <lambda>       z+CmfTaskReport.export_time.<locals>.<lambda>c                 S   s   g | ]}|j jqS r   rS   rL   r   r   r   rO      s     c                    s   | j j kS r   rJ   record)project_tasks_idsr   r   rW      rX   c                    s   | j jko| jj jjkS r   )r   rK   Zcmf_author_idrP   rY   )current_personr[   r   r   rW      s    c                    s   | j jj jjkS r   )r7   rP   rK   rY   )userr   r   rW      rX   c                 S   s   g | ]}|j jqS r   rJ   )rM   rZ   r   r   r   rO      s     c                    s   | j j kS r   rS   rU   )user_tasks_idsr   r   rW      rX   c                 S   s,   | j jr&| j jjdkr&| j jj| j S | jS )N	task.epic)parent_taskrK   r.   r+   rU   r   r   r   
tasks_sort   s    z-CmfTaskReport.export_time.<locals>.tasks_sort)keyr_   c                    s   | j j jjkS r   rT   rY   rU   r   r   rW      rX   c                    s8     | |}|s|d }n||d 7 } | || d S )N<   )Zget_cell_valueset_cell_value)xyZ	new_valuerK   )wsr   r   update_cell   s
    
z.CmfTaskReport.export_time.<locals>.update_cellrc   u   Всего:
   /)?Zpyexcelerater   r   r    r!   r"   r#   Zopenpyxl.stylesr$   r'   r%   r&   Zdateutil.rruler(   r)   osZload_fieldsr/   rK   r0   r1   ZmodelsZ	CmfPersonZget_current_userlenappendZjsonloadsr   bqlZCmfTasklistZCmfTimeTrackerHistory
isinstanceZ	cmf_alertr+   r*   ZconfigZPROJECT_DIRpathexistsmkdirZ	new_sheetrd   Zset_col_styleZFORMAT_NUMBER_00strftimesetZ
CmfProjectdictrQ   rP   rR   r	   r7   sortedr`   r.   r4   r3   r:   r   Zsave)6r   ro   r9   Zformat_filer   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   rk   r4   Zend_dateZend_date_filterr-   Zhistory_restrictZtasks_filterZtasksZrecords_filterZrecords	file_nameZpath_to_tmprr   wbcoldZproject_idsZprojectsZitogs_total_time_spentZitogsZnumZ
owners_idsZis_ownerZproject_tasksZproject_recordsZproject_lineZproject_usersrZ   rb   Z	user_lineZuser_recordsZ
user_tasksra   Ztask_recordsZ	hist_dateZcol_numrh   Zpath_to_filer   )r\   rV   r[   rN   r]   r^   rg   r   export_time   s$    








zCmfTaskReport.export_time)NNNFNN)r   )NNN)__name__
__module____qualname__classmethodboolrw   r   r   r   strr}   __classcell__r   r   r   r   r      s              
r   N)Zcmf.includeZcommon.fieldsr   r   r   r   r   r   <module>   s   