U
    _i                     @   s*   d dl T d dlmZ G dd dejZdS )    )*)cmf_project_role_assignc                       sv   e Zd Z fddZ fddZ fddZdd Zd	d
 Zdd Zdd Z	e
dd Zeedddd Z  ZS )CmfProjectRoleAssignc                    s   t   dddg S )Nparentzproject_role.codemembers)supersave_preload_fieldsself	__class__ 3./modules/project/models/cmf_project_role_assign.pyr      s
    z(CmfProjectRoleAssign.save_preload_fieldsc                    s8   t  j||}tj  tj  tj  |   |S N)r   savemodelsCmfProjectPermSchemetrigger_reloadr   CmfProjectNotifyScheme_calc_sdesk_clientsr
   argskwargsresr   r   r   r      s    


zCmfProjectRoleAssign.savec                    s8   t  j||}tj  tj  tj  |   |S r   )r   deleter   r   r   r   r   _calc_sdesk_clients_deleter   r   r   r   r      s    


zCmfProjectRoleAssign.deletec                 C   s   | j jd| j d d S NzPPP-PR-ADMIN)obj)r   check_project_role_accessr	   r   r   r   check_edit_perm   s    z$CmfProjectRoleAssign.check_edit_permc                 C   s    | j  r| j jd| j d d S r   )r   loadr   r	   r   r   r   check_delete_perm    s    
z&CmfProjectRoleAssign.check_delete_permc                 C   s  | j jrZ| j jr.| j jjdkr.t| j}g }q| j jrT| j jjdkrTg }t| j}qd S nv| j rp| j jdkspd S g }g }| jjrt| jjt| jj D ]}|| qt| jjt| jj D ]}|| q|D ]}|j	dkr|j
dd |jr|  q|j	dkrd|_|  q|j	dkrV|j D ]"}|j
dd |jr0|  q0qtddd q|D ]x}|j	dkr|j
dd |jr|  nH|j	dkrn:|j	dkrh|j D ]"}|j
dd |jr|  qqhd S )	Nsdesk-client:default	CmfPersonTforce
CmfCompanyCmfPersonGroupu|   На эту роль можно назначать только Компании, Пользователей и Группы)abort)project_role
is_changedoldcodelistr   newsetappend
class_name_calc_servicedesk_allowr   Zservicedesk_allow
rg_members
all_nestedZ	cmf_alert)r
   Zneed_deleteZneed_addr   personr   r   r   r   $   sV    




z(CmfProjectRoleAssign._calc_sdesk_clientsc                 C   s   | j r| j jdksd S | jD ]j}|jdkrF|jdd |jr|  q|jdkrRq|jdkr|j D ]}|jdd |jrf|  qfqd S )Nr"   r#   Tr$   r&   r'   )	r)   r,   r   r1   r2   r*   r   r3   r4   )r
   r   r5   r   r   r   r   [   s    




z/CmfProjectRoleAssign._calc_sdesk_clients_deletec                 C   s   t d tdd dS )u   Вызываем при изменении назначений и при изменении агрегатов (группы, OrgUnit итп)z$CmfProjectRoleAssign::trigger_reloadCmfProjectRoleAssign:changedN)printZcmf_emit_server_event)clsr   r   r   r   n   s    z#CmfProjectRoleAssign.trigger_reloadr6   )Zchannelc                  K   s   i t _td d S )Nz9CmfProjectRoleAssign::on_project_role_assign_changes done)ZAPPZcache_in_project_roler7   )_kwargsr   r   r   on_project_role_assign_changest   s    z3CmfProjectRoleAssign.on_project_role_assign_changes)__name__
__module____qualname__r   r   r   r   r!   r   r   classmethodr   staticmethodZon_server_eventr:   __classcell__r   r   r   r   r      s   7
r   N)Zcmf.includeZmodules.project.fieldsr   r   r   r   r   r   <module>   s   