B
    Y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                   sZ   e Zd Zejjdg Zdd fdd
Zedee	d fdd	Z
dedddZ  ZS )CmfTaskReportexport_timeF)TEXKOM_db_deletec               sJ   x2t jjdd| g|dD ]}|j|d|i| qW t j|d|i|S )Nparentz==)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_idz==)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fact)returnc       @         s,  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
dg}| dddddg | jj}| jj}d }| j}|rdd|ggng }|r||dd }|dd|g tj }|d krd!nd"}d }|r"d#d$|gf}t|jrL|rL|d d% |d&|g t| jjjg}|rn|| d'g| }tj j!||d(}dd&|gdd|gdd|gd)d*|gg}d+d, |D } | d-d.d g d'g|  }!t|jr|!|d&|g tj"j!|!dd/d!dd-gd(}"t#||r|
 }t#||r2|
 }|s@t$d0 | }#|#%d1&dd%d2 'd%|d3d4 &dd5d6 'd5|d7d4 &dd8d9 'd8|d:d4 &dd;d< 'd;|d=d4 &dd>d? 'd>|d@d4 &ddAdB 'dA|dC|
|j(dD dE}$g }%|p0|) 
 }|rH||||dF}%n|||dGdH}%x<|%D ]4}&&d|$|&*dI '|$|d@d4 |$d7 }$q\W t+dJd, |D }'tj,j!dKd&|'gd"dLgd(}(d})t- }*d%}+x|(D ]  j.j/jgdMd,  j0jD  },|j/j|,k}-t1 fdNdO|}.dPd, |.D t!t1fdQdO|"}/t|/dkrNq|+}0&|0d% j2 &|0d> j3 |+d7 }+i }1x|/D ]}2|2j4|1|2j4j/j< qW x|1D ]}3|+}4|1|3 t!t1fdRdO|/}5dSd, |5D t!t1fdTdO|}6&|4d5j2 &|4d% j2 |+d7 }+dUdV }7xt5|6|7dWD ]&|+d5j2 &|+d% j2 j6jrj6jj7dXkr&|+d8j6j2j j7dXkr&|+d8j2j n&|+d;j2 &|+d>j3 t!t1fdYdO|5}8x|8D ]}2|2j8j
 }9|9| j9dE }:fdZd[};|;|+|:|2j:j |;|0|:|2j:j |;|4|:|2j:j |;|+dA|2j:j |;|0dA|2j:j |;|4dA|2j:j |)|2j:jd\ 7 })|9|*krd|*|9< |*|9  |2j:jd\ 7  < qW |+d7 }+q2W qW qW dE}$&|+dd] &|+dA|) x@|%D ]8}&'|$|d^d4 &|+|$|*;|&
  |$d7 }$qW tj<| j2 d_| j3 d_|)|j=d`da| t>j?db}<t@A  |<B  W d Q R X |C }=tD|=|<j/j }>|dckr|>Edd*}?tFG|?Hfded,tIjJD  W d Q R X n
|#B|> tE|>df*}?t@A  |<jK|?dgdgdh W d Q R X W d Q R X W d Q R X |<jLS )iNr   )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ft_responsible
date_startdate_endzreport_filter.bqlZreport_type
start_datez>=   )days<r   
cmf_author	cmf_ownerZtimetracker_historyZEXISTS   INZAND)r	   fieldshistory_type=c             S   s   g | ]}d |kr|qS )Nr   ).0Z	conditionr   r   r   
<listcomp>e   s    z-CmfTaskReport.export_time.<locals>.<listcomp>
time_spentz!=zparent.parentu)   Нет задач для экспортаu   Задачиu   Проект   )size   u   Пользователь(      u   Эпик      u   Задача2      u   Код      u   Часы работы   )rD   format   )dtstartZuntilim  )rQ   countz%Y-%m-%dc             S   s   g | ]}|j jqS r   )r   value)r@   taskr   r   r   rA      s    idcmf_owner_assistantsc             S   s   g | ]}|j jqS r   )rU   rS   )r@   Z	assistantr   r   r   rA      s    c                s   | j j jjkS )N)r   rS   rU   )rT   )projectr   r   <lambda>       z+CmfTaskReport.export_time.<locals>.<lambda>c             S   s   g | ]}|j jqS r   )rU   rS   )r@   rT   r   r   r   rA      s    c                s   | j j kS )N)r   rS   )record)project_tasks_idsr   r   rX      rY   c                s   | j jj jjkS )N)r9   rU   rS   )rZ   )userr   r   rX      rY   c             S   s   g | ]}|j jqS r   )r   rS   )r@   rZ   r   r   r   rA      s    c                s   | j j kS )N)rU   rS   )rT   )user_tasks_idsr   r   rX      rY   c             S   s,   | j jr&| j jjdkr&| j jj| j S | jS )Nz	task.epic)parent_taskrS   r1   r.   )rT   r   r   r   
tasks_sort   s    z-CmfTaskReport.export_time.<locals>.tasks_sort)keyz	task.epicc                s   | j j jjkS )N)r   rS   rU   )rZ   )rT   r   r   rX      rY   c                s8     | |}|s|d }n||d 7 } | || d S )N<   )get_cell_valueset_cell_value)xyZ	new_valuerS   )wsr   r   update_cell   s
    
z.CmfTaskReport.export_time.<locals>.update_cellra   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 )r6   )rb   )r@   col)rowrf   r   r   rA     s    z8CmfTaskReport.export_time.<locals>.<listcomp>.<listcomp>)rangeZnum_columns)r@   )rf   )rn   r   rA     s   rbF)ZbackupZsave_preview)MZpyexcelerater    r!   r"   r#   r$   r%   Zopenpyxl.stylesr&   r)   r'   r(   r*   Zdateutil.rruler+   r,   ostempfileZload_fieldsr3   rS   r4   r2   appendr
   Z	CmfPersonZget_current_userlenZjsonloadsr   bqlZCmfTaskr   ZCmfTimeTrackerHistory
isinstanceZ	cmf_alertZ	new_sheetrc   Zset_col_styleZFORMAT_NUMBER_00ZnowZstrftimesetZ
CmfProjectdictr:   rU   rV   r	   r.   r-   r9   sortedr^   r1   r5   r7   rB   r   ZCmfAttachmentZutcgcurrent_personZcmfutilZdisable_aclZsaveZTemporaryDirectoryr   openrk   writerZ	writerowsro   Znum_rowsZupload_stream_fileZurl)@r   r>   rv   r=   Zformat_filer    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   rq   rr   r5   Zend_dateZend_date_filterr0   Z!timetracker_history_exists_filterr|   Zfield_name_filter_respZhistory_restrictZprepare_task_filterZtasks_filterZtasksZ
conditionsZfiltered_conditionsZrecords_filterZrecordswbrm   ZdatesdZproject_idsZprojectsZitogs_total_time_spentZitogsZnumZ
owners_idsZis_ownerZproject_tasksZproject_recordsZproject_lineZproject_usersrZ   r`   Z	user_lineZuser_recordsZ
user_tasksr_   Ztask_recordsZ	hist_dateZcol_numrg   Z
attachmentZtemp_dirZ	file_pathfr   )rW   r[   rT   r\   r]   rf   r   r   #   sJ    









*







.zCmfTaskReport.export_time)NNNFNN)r   NNN)__name__
__module____qualname__r   r   Zapi_methodsr   classmethodboolry   r   strr   __classcell__r   r   )r   r   r      s    r   )rk   Zpathlibr   Zcmf.includeZcommon.fieldsr   r   r   r   r   r   <module>   s   