B
    f                 @   s*   d dl T d dlmZ G dd dejZdS )    )*)cmf_approve_groupc                   sN   e Zd Zdd Zed fdd	Z fddZ fdd	Z fd
dZ  Z	S )CmfApproveGroupc       	      C   s   g }x| | D ]}t |tjr\|j|jdd}|dkrB|| qxx|D ]}|| qHW qt |tjr|snqtjjdd|gdd|ggdgd	}x*|D ]}||j	
 7 }qW q||j
 7 }qW |S )
u  Получает всех аппруверов, включая вложенных в персонгруппы, принадлежащих ролям итп
        app_type - тип получаемых аппруверов (approvers/master_approvers)
        T)Zall_nested_personsNparentz==Zproject_role=members)filterZfields)
isinstancemodels	CmfPersonZextract_var_objcodeappendZCmfProjectRoleZCmfProjectRoleAssignlistr   Z
all_nestedZ
rg_members)	selfZapp_typeZprojectobjresultapproverZextracted_membersZassignsZassign r   $./common/models/cmf_approve_group.pyget_all_approvers   s"    

z!CmfApproveGroup.get_all_approversNc                sz   |dkr`|sg }|si }| d | d dtjjdddgg|d< t j|fd||d	|S t j|f||d
|S )N	approversz-systemnameORsystemz==Tr   )Zinclude_hiddenorder_bymodels_filters)r   r   )r   r
   r   Zdefault_options_filtersuperfield_options_list)clsZrelation_field_namer   r   kwargs)	__class__r   r   r   #   s    

z"CmfApproveGroup.field_options_listc                s   t   ddddg S )Nr   zparent.workflowr   master_approvers)r   save_preload_fields)r   )r    r   r   r"   9   s    z#CmfApproveGroup.save_preload_fieldsc                s@   |  ddddg ttjj| jjjj| jjgd t	 j
||S )Nr   zparent.workflowr   r!   )args)Zload_fieldsschedule_deferred_jobr
   CmfWorkflowZremove_approvegroup_approvesr   workflowidvaluer   delete)r   r#   r   )r    r   r   r)   <   s     zCmfApproveGroup.deletec                s   | j r6t j|| ttjj| jjj	j
| j	j
gd njt j|| d| j	j
i}| jjrdd | jjD |d< dd | jjD |d< ttjj| jjj	j
g|d d S )	N)r#   Zapprove_group_idc             S   s   g | ]
}|j qS r   )r'   ).0r   r   r   r   
<listcomp>L   s    z(CmfApproveGroup.save.<locals>.<listcomp>Zapprovers_old_idsc             S   s   g | ]
}|j qS r   )r'   )r*   r   r   r   r   r+   M   s    Zapprovers_new_ids)r#   r   )Zis_newr   saver$   r
   r%   Zadd_approvegroup_approvesr   r&   r'   r(   r   Z
is_changedoldnewZrecalc_all_approves)r   r#   r   Z
job_kwargs)r    r   r   r,   B   s    "zCmfApproveGroup.save)NN)
__name__
__module____qualname__r   classmethodr   r"   r)   r,   __classcell__r   r   )r    r   r      s   r   N)Zcmf.includeZcommon.fieldsr   r   r   r   r   r   <module>   s   