o
    -h                     @   sd   d dl mZ d dlmZ d dlmZ d dlmZmZ d dlZG dd dej	Z
G dd	 d	ej	ZdS )
    )models)Usertimezone)datetime	timedeltaNc                       s*  e Zd Zg dZg dZejdejddZ	ej
ddZej
ddd	d
ZejeejddZej
deddZej
deddZejddZejdddZejdddZejddZejddZe Zej
ddZejddZdd Z fddZ dd Z!e"dd Z#e"dd  Z$d!d" Z%G d#d$ d$Z&  Z'S )%Tenant))basiczBasic - KES 2,000/month)standardzStandard - KES 5,000/month)premiumzPremium - KES 10,000/month))activeActive)	suspended	Suspended)trialTrial)expiredExpiredTF)primary_keydefaulteditable   )
max_length   z?Unique code for tenant login (letters, numbers only, no spaces))r   unique	help_textowned_tenants	on_deleterelated_namer	   r   choicesr   r   auto_now_add)nullblank   r         )r%   c                 C   s   | j S )N)nameself r-   #/var/www/html/pos/tenants/models.py__str__*   s   zTenant.__str__c                    s@   | j st tdd | _ | js|  | _t j|i | d S )N   )days)trial_ends_atr   nowr   tenant_codegenerate_tenant_codesupersave)r,   argskwargs	__class__r-   r.   r7   -   s
   
zTenant.savec                 C   s   ddl }ddl}ddl}|dd| j dd }t|dk r+d|j|j	dd}|}d	}t
jj|d
 rK| | }|d	7 }t
jj|d
 s8|S )z.Generate unique tenant code from business namer   Nz[^a-zA-Z0-9] 
   r(      )kr&   )r4   )rerandomstringsubr*   lowerlenjoinr!   ascii_lowercaser   objectsfilterexists)r,   r@   rA   rB   	base_codecodecounterr-   r-   r.   r5   4   s   zTenant.generate_tenant_codec                 C   s,   ddl m} | jdu rdS | }|| jkS )z7Check if tenant is currently active (trial not expired)r   r   NT)django.utilsr   r2   r3   )r,   r   r3   r-   r-   r.   	is_activeJ   s
   

zTenant.is_activec                 C   sX   t  }| jdkr| jr| j| }td|jS | jdkr*| jr*| j| }td|jS dS )Nr   r   r   )r   r3   statusr2   maxr1   subscription_ends_at)r,   r3   deltar-   r-   r.   days_remainingS   s   

zTenant.days_remainingc                 C   s   dddd}| | jdS )Ni  i  i'  )r	   r
   r   )getplan)r,   pricesr-   r-   r.   get_plan_price^   s
   zTenant.get_plan_pricec                   @   s   e Zd ZdZdS )zTenant.Metatenants_tenantN)__name__
__module____qualname__db_tabler-   r-   r-   r.   Metaf   s    r^   )(rZ   r[   r\   PLAN_CHOICESSTATUS_CHOICESr   	UUIDFielduuiduuid4id	CharFieldr*   r4   
ForeignKeyr   CASCADEownerrV   rP   DateTimeField
created_atr2   rR   IntegerField	max_shops	max_users
EmailFieldcontact_emailcontact_phone	TextFieldaddressr/   r7   r5   propertyrO   rT   rX   r^   __classcell__r-   r-   r:   r.   r      s<    


r   c                   @   sv   e Zd Zg dZejeejddZeje	ejddZ
ejdeddZejdd	Zejdd
ZG dd dZdd ZdS )
TenantUser))rh   Owner)adminAdmin)managerManager)staffStafftenant_usersr   tenant_membershipsr   r{   r    Tr'   r"   c                   @   s   e Zd ZdZdZdS )zTenantUser.Meta)tenantusertenants_tenant_userN)rZ   r[   r\   unique_togetherr]   r-   r-   r-   r.   r^   x   s    r^   c                 C   s   | j j d| jj S )Nz - )r   usernamer   r*   r+   r-   r-   r.   r/   |   s   zTenantUser.__str__N)rZ   r[   r\   ROLE_CHOICESr   rf   r   rg   r   r   r   re   roleBooleanFieldrO   ri   	joined_atr^   r/   r-   r-   r-   r.   ru   j   s    ru   )	django.dbr   django.contrib.auth.modelsr   rN   r   r   r   rb   Modelr   ru   r-   r-   r-   r.   <module>   s    c