U
    (fh                     @   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 }| | D ]}t |tjrV|j|jdd}|dkr@|| q|D ]}|| qDqt |tjr|shqtjjdd|gdd|ggdgd	}|D ]}||j	
 7 }qqt |tjr||j7 }qt |tjr||j q||j
 7 }q|S )
u  Получает всех аппруверов, включая вложенных в персонгруппы, принадлежащих ролям итп
        app_type - тип получаемых аппруверов (approvers/master_approvers)
        T)Zall_nested_personsNparent==Zproject_role=members)filterZfields)
isinstancemodels	CmfPersonZextract_var_objcodeappendZCmfProjectRoleZCmfProjectRoleAssignlistr   Z
all_nestedZ
CmfOrgUnitZpersonsZCmfRoleZpersonZ
rg_members)	selfZapp_typeZprojectobjresultapproverZextracted_membersZassignsZassign r   $./common/models/cmf_approve_group.pyget_all_approvers   s0    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systemr   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dg S )Nr   parent.workflowr   master_approversZis_all_approvers_required)r   save_preload_fields)r   r!   r   r   r%   =   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   r#   r   r$   args)Zload_fieldsschedule_deferred_jobr   CmfWorkflowZremove_approvegroup_approvesr   workflowidvaluer   delete)r   r'   r    r!   r   r   r-   B   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 )	Nr&   Zapprove_group_idc                 S   s   g | ]
}|j qS r   r+   .0r   r   r   r   
<listcomp>R   s     z(CmfApproveGroup.save.<locals>.<listcomp>Zapprovers_old_idsc                 S   s   g | ]
}|j qS r   r.   r/   r   r   r   r1   S   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_kwargsr!   r   r   r2   H   s    "zCmfApproveGroup.save)NN)
__name__
__module____qualname__r   classmethodr   r%   r-   r2   __classcell__r   r   r!   r   r      s   !r   N)Zcmf.includeZcommon.fieldsr   r   r   r   r   r   <module>   s   