
    esi                     l    d dl Z d dlmZ d dlmZmZ d dlmZ  e j                  e	      Z
 G d d      Zy)    N)CompanyType)
PermissionRole)CompanyRoleRepositoryc                       e Zd ZdZddddgdZddg d	dZd
dg ddddg ddddg ddddg ddddg ddgZed        Zed        Z	ed        Z
ed        Zy)CompanyRoleServicez2Service for managing company roles and permissionszDealership AdminzoThis role is specifically created for dealership admin which is a dealership under a parent dealerships groups.dealership_group_view_callsdealership_group_view_dashboard)namedescriptionpermissionszDealerships Group Adminz{This role is specifically created for dealership groups where a head office have hierarchy of other dealerships and groups.)#dealership_group_create_dealerships#dealership_group_create_departments!dealership_group_edit_departmentsr	   r
   !dealership_group_view_dealerships!dealership_group_view_departmentsedit_companyview_company_botsedit_company_botsview_dealerships_adminscreate_dealerships_admins)delete_dealerships_adminsview_officehoursedit_officehoursedit_holidaysmanage_rabeeca_settingsview_holidaysview_profileview_other_profileszChief Adminz+Company administrator with full permissions)'
view_rolescreate_roles
edit_rolesdelete_rolesview_customers
view_userscreate_users
edit_usersdelete_usersmanage_usersview_companyr   delete_companyview_reportsview_analyticsr   edit_profiler   view_permissionsassign_rolesview_bdc_dashboardview_service_dashboardr   r   r   r   view_service_callsview_officehoursr   view_salestimeedit_salestimeview_catchphraseedit_catchphraseview_calendarupdate_passwordview_bdc_callsview_audit_logmanage_hazel_settingsmanage_maya_settingszBDC Managerz3BDC Manager with user and company management access)r$   r0   r9   r:   zService Managerz"Basic employee with limited access)r$   r1   r2   r#   r+   r9   r;   zBDC Advisorz Read-only access to company data)r0   r3   r:   zService Advisor)view_advisor_dashboardr3   view_self_service_callsc                 b   | j                   t        j                  k(  r%t        j	                  t        j
                  |        y| j                   t        j                  k(  r%t        j	                  t        j                  |        yt        j                  D ]  }t        j	                  ||         y)z:Create default roles for a company when it's first createdN)	company_typer   
DEALERSHIPr   _create_default_role_internalDEALERSHIP_ROLEDEALERSHIP_GROUPDEALERSHIP_GROUP_ROLEDEFAULT_ROLES)company	role_datas     U/var/www/html/dp2/backend_v2.1/server/apps/companies/services/company_role_service.pycreate_default_rolesz'CompanyRoleService.create_default_rolesf   s     ;#9#99<<"22 ;#?#??<<"88 +99I<<YP :    c                    	 | d   }t         j                  j                  |d      }t        |      t        |j	                  dd            z
  }|rt
        j                  d| d    d|        t        j                  j                  | d   || d	   dd
      \  }}|rL|j                  j                  |       t
        j                  d|j                   d|j                   d       y t
        j                  d|j                   d|j                   d       y # t        $ r>}t
        j                  d| d    d|j                   dt        |              Y d }~y d }~ww xY w)Nr   T)codename__in	is_activecodename)flatzMissing permissions for role"r   z": r   )r   rO   )r   rH   defaultszCreated role 'z' for company ''zRole 'z' already exists for company 'zFailed to create role 'z': )r   objectsfiltersetvalues_listloggerwarningr   get_or_creater   infor   	Exceptionerrorstr)default_rolerH   requested_permsr   missingrolecreatedes           rJ   rC   z0CompanyRoleService._create_default_role_internal{   sl   "".}"=(0077!0" 8 
 o.[5L5LZ^b5L5c1ddNN7V8L7MSQXPYZ
 !% : :%f-#'3M'B%) !; !g $$((5KK.?7<<.XY Z[KK&3QRYR^R^Q__` ab -l6.B-C D$$+LL>SVH> s   C)D ,0D 	E$&4EE$c                     t        | dd       }|sg S t        j                  |      }g }t        |d      D ]8  \  }}|j	                  ||j                         j                  dd      |d       : |S )Nactive_company   )start _)idkeylabel)getattrr   list_company_roles	enumerateappendlowerreplace)userrH   
role_namesresponseidxr   s         rJ   list_roles_for_companyz)CompanyRoleService.list_roles_for_company   sw    $ 0$7I*==gF
":Q7ICOOzz|++C5  8 rL   c                    t        |dd      }|sg S | D cg c]9  }t        |      j                         j                         j	                  dd      ; }}|j
                  j                  d      }i }|D ]  }|j                  j                         j	                  dd      }|j                  j                         |t        |j                        <   |j                  j                         ||<   |j                  j                         ||j                  j                         <    g }	|D ]  }
|
|v s|	j                  ||
           t        t        |	            S c c}w )zOConvert frontend role filters (ids, keys, labels) to actual company role names.rf   Nri   rj   T)rO   )rn   r^   striprr   rs   rolesrU   r   rk   rq   listrV   )
param_listrt   rH   p
normalizedr{   role_maprb   rl   ru   vals              rJ   map_param_to_role_namesz*CompanyRoleService.map_param_to_role_names   s*    $ 0$7I ISS
1c!flln**,44S#>

S $$t$4D))//#++C5C%)YY__%6HS\" IIOO-HSM*.))//*;HTYY__&'	  
Ch!!(3-0  C
O$$# Ts   >EN)__name__
__module____qualname____doc__rD   rF   rG   staticmethodrK   rC   rx   r    rL   rJ   r   r      s    < 'K .1
O .V6 "H	
$ "P	
 &?	
 "=	
 &=	
U1Mf Q Q( # #J  " % %rL   r   )loggingapps.companies.constantsr   apps.permissions.modelsr   r   apps.companies.repositoriesr   	getLoggerr   rX   r   r   rL   rJ   <module>r      s1     0 4 = 
		8	$A% A%rL   