o
    #/g!,                     @   s  d dl mZ d dlmZmZ d dlmZ d dlmZm	Z	m
Z
mZ d dlmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ G dd dejZG dd deZG dd deeZg dZG dd deeZdd Z G dd dejZ!G dd dejZ"G dd dejZ#dS )    )get_user)BaseUserManagerAbstractBaseUser)make_password)PermissionsMixinGroup
PermissionUser)modelstransaction)gettext_lazy)Batch)timezone)	timedelta)ValidationErrorc                   @   s   e Zd ZejddZejddZejdddZej	dddd	Z
ejd
dZejddZejddZejddZejddZejddZdd ZdS )Companyd   
max_lengthr   default r   r   zmedia/static/company_logos/T)	upload_toblanknull   auto_now_addauto_nowFc                 C      | j S N)nameself r&   */var/www/rescue_company/accounts/models.py__str__      zCompany.__str__N)__name__
__module____qualname__r
   	CharFieldr#   IntegerFieldnumber_of_logins_allowedredirect_url
ImageField
logo_on_qrcost_per_qr_codetotal_amountDateTimeFieldcreatedupdatedBooleanField	is_active
is_deletedr(   r&   r&   r&   r'   r      s    r   c                   @   s   e Zd Zdd Zdd ZdS )CustomAccountManagerc                 K   sd   | dd | dd | dd |ddurtd|ddur(td| j||fi |S )Nis_staffTis_superuserr9   z+Superuser must be assigned to is_staff=Truez/Superuser must be assigned to is_superuser=True)
setdefaultget
ValueErrorcreate_user)r%   phonepasswordother_fieldsr&   r&   r'   create_superuser!   s   z%CustomAccountManager.create_superuserc                 K   s:   |st td| jdd|i|}|| |  |S )Nz You must provide an phone numberrB   r&   )r@   _modelset_passwordsave)r%   rB   rC   rD   userr&   r&   r'   rA   +   s   
z CustomAccountManager.create_userN)r*   r+   r,   rE   rA   r&   r&   r&   r'   r;       s    
r;   c                       s  e Zd ZejddZejddZejdddZej	e
ejd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jddZejddZejddZejedddZejedddZejddZejddZe ZdZ dgZ!G dd dZ"dd Z# fddZ$  Z%S )CompanyUserT)unique   r      r   rL   	on_deleter   r   r   Adminr   r   r      Fr   company_groupsrelated_namer   company_user_permissionsr   r   emailrB   c                   @      e Zd ZdZdS )zCompanyUser.MetazCompany UsersNr*   r+   r,   verbose_name_pluralr&   r&   r&   r'   MetaQ       r]   c                 C   r!   r"   )rY   r$   r&   r&   r'   r(   T   r)   zCompanyUser.__str__c                    sL   | j r	| j j| _nd| _| jr| jdst| j| _t j|i | d S )Nr   zpbkdf2_sha256$bcryptargon2)companyr#   company_namerC   
startswithr   superrI   r%   argskwargs	__class__r&   r'   rI   W   s   zCompanyUser.save)&r*   r+   r,   r
   
EmailFieldrY   r-   r#   rB   
ForeignKeyr   SET_NULLrb   role	TextFieldaddressrC   r8   r9   r<   r:   r=   ManyToManyFieldr   groupsr   user_permissionsr5   r6   r7   r;   objectsUSERNAME_FIELDREQUIRED_FIELDSr]   r(   rI   __classcell__r&   r&   ri   r'   rK   4   s,    rK   ))Malerx   )Femalery   )Otherrz   c                       sj  e Zd Zej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d	Zejd
ddZejd
ddZejd
ddZejddddZejddddZejddddZejddddZejddddZejdddZejddZejdddZejdddZej
ddd	Zej
ddd	ZejddddZejddd	ZejddddZejddddZejddd	Z ejddddZ!ejd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j(dddZ)ej(ddZ*ej+ddZ,ej+ddZ-ej.e/ej0dddZ1ej2e3dddZ4ej2e5dddZ6dZ7G dd  d Z8d!d" Z9	  fd#d$Z:e;d%d& Z<e;d*d(d)Z=  Z>S )+	Customersr   TrO   rM   r   r   
   rx   )r   choicesr   rS      )r   r   r      )r   z media/static/user_profile_image/z(media/static/user_profile_image/logo.png)r   r   rT      2   Fstatus)r   verbose_namer   r   r   rP   customers_groupsrV   customers_user_permissionsqr_codec                   @   rZ   )zCustomers.Metar{   Nr[   r&   r&   r&   r'   r]      r^   r]   c                 C   r!   r"   )r   r$   r&   r&   r'   r(      r)   zCustomers.__str__c                    s   | j r1| jr1tjj| j dj}|s0| jds0t| j| _t 	 t
dd | _t 	 | _n| jsP| j rPt| j| _t 	 t
dd | _t 	 | _t j|i | d S )Npkr_   i  days)r   rC   r{   rt   r?   rd   r   r   nowdater   
valid_uptoregistration_datere   rI   )r%   rg   rh   original_passwordri   r&   r'   rI      s   zCustomers.savec                 C   s8   t   }| jj|dd}|D ]	}d|_|  qd S )NT)valid_upto__ltr9   F)r   r   r   rt   filterr9   rI   )clstodayexpired_usersrJ   r&   r&   r'   deactivate_expired_users   s   
z"Customers.deactivate_expired_users   c                 C   s\   | j j|d}tj j|d}d|_t  t|d d |_|	  t
j j|||d d S )Nr   Tim  r   )company_usercustomeryears_extended)rt   r?   rK   r9   r   r   r   r   r   rI   ReactivationLogcreate)r   user_idcompany_user_idyearsrJ   r   r&   r&   r'   reactivate_user   s   
zCustomers.reactivate_user)r   )?r*   r+   r,   r
   r-   r   
first_name	last_nameGENDER_CHOICESgender	DateFielddobheight_feetheight_inchesweightaddress_line1address_line2citystatepinrB   rk   rY   r1   profile_imagerC   r   r   emergency_phone1emergency_email1emergency_name1emergency_phone2emergency_email2emergency_name2primary_physician_nameprimary_physician_contactblood_groupro   medical_history	allergiesr8   r9   r:   r5   r6   r7   rl   r   rm   batchrq   r   rr   r   rs   ru   r]   r(   rI   classmethodr   r   rw   r&   r&   ri   r'   r{   h   sb    
r{   c                 C   s   | j }|dkrtd| S )Ni   z2The maximum file size that can be uploaded is 10MB)sizer   )valuefilesizer&   r&   r'   validate_file_size   s   r   c                   @   s^   e Zd ZejedejdZejdddZ	ej
degdZejddZd	d
 ZG dd dZdS )CustomerDocument	documents)rW   rQ   rM   Tr|   zmedia/customer_documents/)r   
validatorsr   c                 C   s   | j j d| jj S )Nz - )r   r   documentr#   r$   r&   r&   r'   r(      s   zCustomerDocument.__str__c                   @   rZ   )zCustomerDocument.MetazCustomer DocumentsNr[   r&   r&   r&   r'   r]      r^   r]   N)r*   r+   r,   r
   rl   r{   CASCADEr   r-   doc_name	FileFieldr   r   r5   uploaded_atr(   r]   r&   r&   r&   r'   r      s    r   c                   @   s`   e Zd ZejeejdZejeejdZ	ej
ddZe Zej
ddZej
ddZdd ZdS )r   rQ   Tr   r   c                 C   s    | j j d| jj d| j dS )Nz reactivated z for z years)r   rY   r   r   r   r$   r&   r&   r'   r(      s    zReactivationLog.__str__N)r*   r+   r,   r
   rl   rK   r   r   r{   r   r5   reactivated_onr.   r   r6   r7   r(   r&   r&   r&   r'   r      s    r   c                       sl   e Zd ZejeejdZe Z	eje
ejddZejdddZejddZejddZ fdd	Z  ZS )
Transactionsr   transaction_updated_by)rQ   rW   TrS   r   r   c                    sh   t  & | jjr| j j| j8  _| j  tt	| j|i | W d    d S 1 s-w   Y  d S r"   )
r   atomic_stateaddingrb   r4   amountrI   re   r   rf   ri   r&   r'   rI     s   

"zTransactions.save)r*   r+   r,   r
   rl   r   r   rb   r.   r   rK   r   ro   noter5   r6   r7   rI   rw   r&   r&   ri   r'   r      s    r   N)$django.contrib.authr   django.contrib.auth.base_userr   r   django.contrib.auth.hashersr   django.contrib.auth.modelsr   r   r   r	   	django.dbr
   r   django.utils.translationr   rF   qr_manager.modelsr   django.utilsr   datetimer   django.core.exceptionsr   Modelr   r;   rK   r   r{   r   r   r   r   r&   r&   r&   r'   <module>   s&    -o