o
    ^h                     @   sb   d dl mZ d dlmZ G dd deZG dd dejZG dd dejZG d	d
 d
ejZdS )    )AbstractUser)modelsc                   @   sv   e Zd Zg dZejdeddZejdddZejddZ	ej
d	d
Zdd Zedd Zedd Zedd ZdS )
CustomUser))adminAdmin)
technician
Technician)clientClient   r	   )
max_lengthchoicesdefault   T)r   blankr   Fr   c                 C   s   | j  d|   dS Nz ())usernameget_role_displayself r   //var/www/html/optinet_system/accounts/models.py__str__      zCustomUser.__str__c                 C   s4   | j rdS t| dr| jr| jjo| jjjdkS dS )z@Check if user is admin/management - Superusers are ALWAYS adminsTemployee_profile
ManagementF)is_superuserhasattrr   
departmentnamer   r   r   r   is_admin   s
   zCustomUser.is_adminc                 C   s@   | j r| jsdS t| dr| jr| jjo| jjjdv S | jdkS )z!Check if user is technician/staffTr   )r   	MarketingzHR StaffzBilling StaffzCustomer Servicer   )is_staffr   r    r   r!   r"   roler   r   r   r   is_technician   s
   
zCustomUser.is_technicianc                 C   s   | j dkp	t| dS )zCheck if user is clientr	   customer_profile)r&   r    r   r   r   r   	is_client'   s   zCustomUser.is_clientN)__name__
__module____qualname__ROLE_CHOICESr   	CharFieldr&   phone	TextFieldaddressBooleanFieldfirst_login_requiredr   propertyr#   r'   r)   r   r   r   r   r      s    
	
r   c                   @   s~   e Zd Zg dZejeejdddZej	dedZ
ejddZejdddZejdd	Zejdd
ZG dd dZdd ZdS )UserActivityLog))loginLogin)logoutLogout)createCreate)updateUpdate)deleteDelete)viewView)permission_changezPermission ChangeT)	on_deletenullr   r   )r   r   zNo description providedr   )rD   r   r   auto_now_addc                   @   s2   e Zd ZdgZejddgdejddgdgZdS )zUserActivityLog.Metaz
-timestampuser	timestamp)fieldsactivity_typeN)r*   r+   r,   orderingr   Indexindexesr   r   r   r   Meta>   s
    rN   c                 C   s   | j  d| j d| j S Nz - )rG   rJ   rH   r   r   r   r   r   E   s   zUserActivityLog.__str__N)r*   r+   r,   ACTIVITY_TYPESr   
ForeignKeyr   SET_NULLrG   r.   rJ   r0   descriptionGenericIPAddressField
ip_address
user_agentDateTimeFieldrH   rN   r   r   r   r   r   r5   ,   s    
r5   c                   @   s   e Zd ZdZg dZejddddZejddd	Zej	dd
dZ
ejdeddZejddZejddZejddZG dd dZdd ZdS )GroupPermissionManagerz?Model to manage dynamic permissions for user groups/departments))customerzCustomer Management)billingzBilling & Invoicing)ticketzTicket Management)employeezEmployee Management)	financialzFinancial Access)systemzSystem Settings)networkzNetwork Management)	marketingr$   )hrzHuman Resources)expenditurezExpenditure Management)reportszReports & Analyticsd   TzPermission identifier)r   unique	help_text   zHuman readable permission name)r   rf   z*Description of what this permission allows)r   rf   r   zPermission category)r   r   rf   r   rE   )auto_nowc                   @   s   e Zd ZddgZdZdZdS )zGroupPermissionManager.Metacategorydisplay_namezSystem PermissionzSystem PermissionsN)r*   r+   r,   rK   verbose_nameverbose_name_pluralr   r   r   r   rN   b   s    rN   c                 C   s   | j  d| j dS r   )rj   r"   r   r   r   r   r   g   s   zGroupPermissionManager.__str__N)r*   r+   r,   __doc__PERMISSION_CATEGORIESr   r.   r"   rj   r0   rS   ri   r2   	is_activerW   
created_at
updated_atrN   r   r   r   r   r   rX   J   s    rX   c                   @   sj   e Zd ZdZejdejddZejeejddZ	eje
ejdddZejdd	ZG d
d dZdd ZdS )DepartmentPermissionAssignmentzBModel to track which permissions are assigned to which departmentszhr.Departmentpermission_assignments)rC   related_namedepartment_assignmentsTassigned_permissions)rC   rD   rt   rE   c                   @   s   e Zd ZddgZg dZdS )z#DepartmentPermissionAssignment.Metar!   
permission)r!   permission__categorypermission__display_nameN)r*   r+   r,   unique_togetherrK   r   r   r   r   rN   q   s    rN   c                 C   s   | j j d| jj S rO   )r!   r"   rw   rj   r   r   r   r   r   u   r   z&DepartmentPermissionAssignment.__str__N)r*   r+   r,   rm   r   rQ   CASCADEr!   rX   rw   r   rR   assigned_byrW   assigned_atrN   r   r   r   r   r   rr   j   s    rr   N)	django.contrib.auth.modelsr   	django.dbr   r   Modelr5   rX   rr   r   r   r   r   <module>   s   ' 