o
    /i                     @   s   d dl Z d dlZd dl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 d dlmZ d dlmZmZmZ G dd	 d	eZG d
d deeZG dd dejZG dd dejZG dd dejZG dd dejZdd ZG dd dejZdS )    N)	ModelForm)models)AbstractUser)gettext_lazy)BaseUserManager)r   AbstractBaseUserPermissionsMixinc                   @   s   e Zd ZdddZdd ZdS )UsersManagerNc                 K   sb   |r|s| j d|dd|}n|std| j dd| |i|}|| |j| jd |S )zd
        Creates and saves a User with the given email, date of
        birth and password.
        Customer)phone_number	user_typez Users must have an email addressemail)usingN )model
ValueErrornormalize_emailset_passwordsave_db)selfr   passwordr   extra_fieldsuserr   r   9/var/www/html/Testing_prj/Navya-Bakers/accounts/models.pycreate_user   s   
zUsersManager.create_userc                 K   s^   | dd | dd |ddurtd|ddur"td| j|fd|i|}|S )zi
        Creates and saves a superuser with the given email, date of
        birth and password.
        is_staffTis_superuserzSuper User must be StaffzSuper User must be Super Userr   )
setdefaultgetr   r   )r   r   r   r   r   r   r   r   create_superuser)   s   zUsersManager.create_superuser)NNN)__name__
__module____qualname__r   r    r   r   r   r   r	      s    
r	   c                   @   s@  e Zd ZejdejdddZejddddddZej	ddZ
ejdg d	ddd
ZejdddZejddZejddddZejddZejddddZejdg ddZej	ddZejdg 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Ze ZdZ g Z!dd Z"dS )UsersTF)primary_keydefaultuniqueeditablezemail address   )verbose_name
max_lengthr'   nullblankr&      ))maleMale)femaleFemale)prefer_not_to_sayzPrefer Not to Say)r+   choicesr,   r-   r,   r-   d   r+   r+   r,   r-         ))activer<   )inactiver=   )suspendr>   r+   r5   ))Super Adminr@   )	NBC AdminrA   )
Shop AdminrB   )PU AdminrC   )r
   r
   )r+   r-   r,   )r-   r,   )auto_now_addr,   )auto_nowr,   r   c                 C   s   | j  d| j d| j S )N z - )
first_name	last_namer   r   r   r   r   __str__t   s   zUsers.__str__N)#r!   r"   r#   r   	UUIDFielduuiduuid4
EmailFieldr   BooleanFieldemail_verified	CharFieldgender	DateFielddobrG   rH   r   r   statususer_verify_statusr   	fcm_tokenDateTimeFieldlast_login_timecreated_dateupdated_dater   r   opt_inr	   objectsUSERNAME_FIELDREQUIRED_FIELDSrJ   r   r   r   r   r$   :   sN    



r$   c                   @   s@   e Zd ZejeejdZejddZ	ej
ddZejddZdS )	OTP)	on_delete   r8   Fr.   TrD   N)r!   r"   r#   r   
ForeignKeyr$   CASCADEr   rQ   otp_coderO   is_verifiedrX   
created_atr   r   r   r   r`   x   s
    r`   c                   @   sn   e Zd Zeje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	d	d
Zejdd	d	d
Zdd ZdS )Address	addressesra   related_name	   rb   )
max_digitsdecimal_placesr7   r8   r)   Tr9   
   c                 C   s   | j  d| j S )Nz, )flat_nolandmarkrI   r   r   r   rJ      s   zAddress.__str__N)r!   r"   r#   r   rd   r$   re   r   DecimalFieldlatitude	longituderQ   rq   rr   address_typerJ   r   r   r   r   ri      s    ri   c                   @   s   e Zd ZejeddejdZe Z	e Z
ejdddejdZejddZejdddZejeddejdZejddZejdddZejdddd	Zd
d ZdS )UserLocationTr,   r-   ra   z
shops.Shoprc   r6   Fr.   zDistance In kilometers)r,   r-   	help_textc                 C   s   | j r
| j j dS d dS )N	Anonymousz's location)r   r   rI   r   r   r   rJ         zUserLocation.__str__N)r!   r"   r#   r   rd   r$   re   r   
FloatFieldrt   ru   SET_NULLshoprX   rh   rK   anonymous_idri   addressrO   is_selected_address	TextFieldlocation_addressdistancerJ   r   r   r   r   rw      s     

rw   c                   @   sf   e Zd ZejeddejdZejdddgdZ	ejddddZ
ejddddZejdd	Zd
d ZdS )LoggingOperationTrx   r;   )r~   r~   )productr   r?   i  r9   rc   c                 C   s   | j r| j jnd d| j S )Nrz   z Operation :)r   r   messagerI   r   r   r   rJ      r{   zLoggingOperation.__str__N)r!   r"   r#   r   rd   r$   re   r   rQ   log_typer   descriptionrX   rh   rJ   r   r   r   r   r      s    r   c                  C   s    t jt j } dtj| ddS )N    )k)stringascii_uppercasedigitsjoinrandomr5   )charsr   r   r   generate_referral_code   s   r   c                       sH   e Zd ZejdejddZejdddZ fddZ	e
d	d
 Z  ZS )Referralr$   referralrk   r   T)r+   r'   c                    s&   | j s|  | _ t j|i | d S )N)referral_codegenerate_unique_codesuperr   )r   argskwargs	__class__r   r   r      s   
zReferral.savec                  C   s    	 t  } tjj| d s| S q)NT)r   )r   r   r]   filterexists)coder   r   r   r      s
   zReferral.generate_unique_code)r!   r"   r#   r   OneToOneFieldre   r   rQ   r   r   staticmethodr   __classcell__r   r   r   r   r      s    r   )rL   r   r   django.formsr   	django.dbr   django.contrib.auth.modelsr   django.utils.translationr   _django.contrib.auth.base_userr   r   r   r	   r$   Modelr`   ri   rw   r   r   r   r   r   r   r   <module>   s$    %>