U
    gh                     @   s6   d dl T d dlmZ d dlmZ G dd dejZdS )    )*)fields)cmf_time_tracker_historyc                       s   e Zd Zddd fdd
Z fddZ fddZ fd	d
Z fddZ fddZ fddZ	dd Z
dd Z fddZ  ZS )CmfTimeTrackerHistoryF	recursiveTEXKOM_db_deletec                   s   t  j|||d| | jdkrdd| jgdd| jgdd| jj gg}tj	j
|dgd}|r| j| j8  _|jd	kr|  n|  | jd
kr|s|s| jj| jj  tj| j d S )Nr   planparent==persondate
sched_workfilterr   r   fact)superdeletehistory_typer
   	cmf_owner
start_datevaluer   modelsCmfTaskResAssignTimephasegetr   
time_spentsaveop_gantt_tasktimetracker_add_work_hookCmfTimeTrackertimetracker_recalc)selfr   r   argskwargs_filterresource_assignment_t	__class__ 1./modules/task/models/cmf_time_tracker_history.pyr      s    


zCmfTimeTrackerHistory.deletec                    s   |  dg t j||}| jdkrdd| jgdd| jgdd| jj gg}t	j
j|ddgd	d
}|r|jrt|  | j| j7  _|  | jdkr| jjj| jjd	d |S )Nparent.op_gantt_taskr	   r
   r   r   r   r   cmf_deletedT)r   r   Zinclude_deletedr   )Zfrom_tth_restore)load_fieldsr   restorer   r
   r   r   r   r   r   r   r   r+   r   r   r   r   r   )r!   r"   r#   resr$   r%   r&   r(   r)   r-      s    

zCmfTimeTrackerHistory.restorec           	         s   t  j|| | jdkr| jjr| dddg | jj| jjp@d }tj	j
| j| jd}| jj }|rdd| jgdd| jgd	d|gg}tjj
|d
gd}|stj| j| j||ddd}| j|7  _|jdd | js
| jdkr
| jj| jj }| jj|| jj tj| j  d S )Nr	   r
   r   r   r   )r   r
   r   r   r   r   r   )r
   r   r   resource_assignmentr   Zactual_workF)notifyr   )r   r   r   r   
is_changedr,   newoldr   ZCmfTaskResAssignr   r   r
   r   r   r   r   r   is_newr   r   remaining_estimater   r    load)	r!   r"   r#   Ztime_spent_diffr/   r   r$   r%   
work_deltar&   r(   r)   r   -   s6    
 zCmfTimeTrackerHistory.savec                    s   t   dddddg S )Nr*   r   r5    parent.op_gantt_task.actual_workr   )r   save_preload_fieldsr!   r&   r(   r)   r9   O   s     z)CmfTimeTrackerHistory.save_preload_fieldsc                    sN   t  j|| | js:| jj| jj }| jj|| j	j
 n| jj| j d S )N)r   _save_importr4   r   r2   r3   r
   r   r   r5   r   )r!   r"   r#   r7   r&   r(   r)   r;   S   s
    z"CmfTimeTrackerHistory._save_importc                    s   |  dddddg | jr| jjdkr8| jjd| jd | jrT| jjd	| jd d S | jrtj| j	krz| jjd
| jd W q t
k
r   | jjd| jd Y qX q| jjd
| jd n
t   d S )Nr
   projectr*   r   r8   ZCLOSEDzPPP-TT-EDIT-CLOSED-TSKobjzPPP-TT-WORKzPPP-TT-EDIT-ALLzPPP-TT-EDIT-OWN)r,   r<   r
   Zcache_status_typecheck_project_role_accessr4   r1   gcurrent_userr   CmfPermissionErrorr   check_edit_permr:   r&   r(   r)   rC   [   s    z%CmfTimeTrackerHistory.check_edit_permc                    s   |  dddddg | jrztj| jkrfz| jjd| jd W qx tk
rb   | jjd| jd Y qxX q| jjd| jd n
t 	  d S )	Nr<   r
   r*   r   r8   zPPP-TT-DELETE-ALLr=   zPPP-TT-DELETE-OWN)
r,   r<   r@   rA   r   r?   r
   rB   r   check_delete_permr:   r&   r(   r)   rD   p   s    z'CmfTimeTrackerHistory.check_delete_permc                 O   sF   | j dkrd S | jr,tjj| df|| ntjj| df|| d S )Nr	   Zworklog_createdZworklog_updated)r   r4   r   CmfEventdo_eventr!   r"   r#   r(   r(   r)   _do_event_save   s
    
z$CmfTimeTrackerHistory._do_event_savec                 O   s(   | j dkrd S tjj| df|| d S )Nr	   Zworklog_deleted)r   r   rE   rF   rG   r(   r(   r)   _do_event_deleted   s    
z'CmfTimeTrackerHistory._do_event_deletedc                    sB   t t  }| dg | jr:| j D ]}|| q*t|S )Nr
   )setr   
get_ownersr,   r
   addlist)r!   r"   r#   ZownersZparent_ownerr&   r(   r)   rK      s    z CmfTimeTrackerHistory.get_owners)__name__
__module____qualname__r   r-   r   r9   r;   rC   rD   rH   rI   rK   __classcell__r(   r(   r&   r)   r      s   "
r   N)Zcmf.includeZcmfr   Zmodules.task.fieldsr   r   r(   r(   r(   r)   <module>   s   