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           5         s  ddl m}m}m}m}m}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rZ|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!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@d1 dA}||||dBD ]4})d||+dC *||d=d1 |d7 }qt,dDdE |D }tj-jdFd#|gdGdHgd%} d}!t. }"d!}#| D ]j/j0jgdIdE j1jD  }$ j0j|$k}%t2fdJdK|}&dLdE |&D |%rtt2fdMdK|}'ntt2 fdNdK|}'t|'dkrސqF|#}()|(d!j! )|(d;j" |#d7 }#i })|'D ]}*|*j3|)|*j3j0j< q|)D ]
}+|#},|)|+ tt2fdOdK|'}-dPdE |-D tt2fdQdK|}.)|,d2j! )|,d!j! |#d7 }#dRdS }/t4|.|/dTD ]~)|#d2j! )|#d!j! j5jr
j5jj6dUkr
)|#d5j5j!j j6dUkr*)|#d5j!j n)|#d8j! )|#d;j" tt2fdVdK|-}0|0D ]}*|*j7j }1|1| j8dA }2fdWdX}3|3|#|2|*j9j |3|(|2|*j9j |3|,|2|*j9j |3|#d>|*j9j |3|(d>|*j9j |3|,d>|*j9j |!|*j9jdY 7 }!|1|"krd|"|1< |"|1  |*j9jdY 7  < qd|#d7 }#qq.qFdA})|#ddZ )|#d>|! ||||dBD ]8}*||d[d1 )|#||":|  |d7 }qn| d\| }4|;|4 |S )]Nr   )WorkbookColorStyleFontFillFormat)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   Часы работы      )ZdtstartZuntilz%Y-%m-%dc                 S   s   g | ]}|j jqS r   r   value.0taskr   r   r   
<listcomp>v   s     z-CmfTaskReport.export_time.<locals>.<listcomp>id	cmf_ownercmf_owner_assistantsc                 S   s   g | ]}|j jqS r   rN   rI   )rK   Z	assistantr   r   r   rM   }   s     c                    s   | j j jjkS r   r   rI   rN   rL   )projectr   r   <lambda>       z+CmfTaskReport.export_time.<locals>.<lambda>c                 S   s   g | ]}|j jqS r   rQ   rJ   r   r   r   rM      s     c                    s   | j j kS r   rH   record)project_tasks_idsr   r   rU      rV   c                    s   | j jko| jj jjkS r   )r   rI   Zcmf_author_idrN   rW   )current_personrY   r   r   rU      s    c                    s   | j jj jjkS r   )r6   rN   rI   rW   )userr   r   rU      rV   c                 S   s   g | ]}|j jqS r   rH   )rK   rX   r   r   r   rM      s     c                    s   | j j kS r   rQ   rS   )user_tasks_idsr   r   rU      rV   c                 S   s,   | j jr&| j jjdkr&| j jj| j S | jS )N	task.epic)parent_taskrI   r-   r*   rS   r   r   r   
tasks_sort   s    z-CmfTaskReport.export_time.<locals>.tasks_sort)keyr]   c                    s   | j j jjkS r   rR   rW   rS   r   r   rU      rV   c                    s8     | |}|s|d }n||d 7 } | || d S )N<   )Zget_cell_valueset_cell_value)xyZ	new_valuerI   )wsr   r   update_cell   s
    
z.CmfTaskReport.export_time.<locals>.update_cellra   u   Всего:
   /)<Zpyexcelerater   r   r    r!   r"   r#   r&   r$   r%   Zdateutil.rruler'   r(   osZload_fieldsr.   rI   r/   r0   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_sheetrb   Zset_col_stylestrftimesetZ
CmfProjectdictrO   rN   rP   r	   r6   sortedr^   r-   r3   r2   r9   r   Zsave)5r   rm   r8   Zformat_filer   r   r    r!   r"   r#   r$   r%   r&   r'   r(   ri   r3   Zend_dateZend_date_filterr,   Zhistory_restrictZtasks_filterZtasksZrecords_filterZrecords	file_nameZpath_to_tmprp   wbcoldZproject_idsZprojectsZitogs_total_time_spentZitogsZnumZ
owners_idsZis_ownerZproject_tasksZproject_recordsZproject_lineZproject_usersrX   r`   Z	user_lineZuser_recordsZ
user_tasksr_   Ztask_recordsZ	hist_dateZcol_numrf   Zpath_to_filer   )rZ   rT   rY   rL   r[   r\   re   r   export_time   s"    








zCmfTaskReport.export_time)NNNFNN)r   )NNN)__name__
__module____qualname__classmethodboolru   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   