U
    YHg                     @   sp   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 G dd deZG d	d
 d
ee	jZdS )    )absolute_import)	BaseQuery)JSONB)func)db)TimestampMixinc                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )	UserQueryc                 C   s   |  tj|k S N)filterUseridfirst)selfuser_id r   -/var/www/dostadmin/dostadmin/db_model/user.pyget_user_by_id
   s    zUserQuery.get_user_by_idc                 C   s4   |dkr|   n| ttjt|k }|S )N )get_users_logr
   r   lowerr   nameall)r   r   usersr   r   r   get_users_by_name   s
    
zUserQuery.get_users_by_namec                 C   s   |  tj|k S r	   )r
   r   
partner_idr   )r   r   r   r   r   get_users_by_partner   s    zUserQuery.get_users_by_partnerc                 C   s   |   S r	   )r   r   r   r   r   r      s    zUserQuery.get_users_logc                 C   s   |  tj|  d S r	   )r
   r   r   in_r   )r   user_idsr   r   r   get_users_by_ids   s    zUserQuery.get_users_by_idsN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   	   s
   r   c                   @   sB  e Zd ZdZeZG dd dZejej	ddZ
ejedddZeej	ed	Zeej	ed
ZejeddZejedddZej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dZejdddddZejdddddZejddddZejdd ddZd d! Zed)d#d$Zd%d& Zed'd( Z d"S )*r   r   c                   @   s   e Zd ZdZdZdS )zUser.Status
incompletecompleteN)r    r!   r"   
INCOMPLETECOMPLETEr   r   r   r   Status#   s   r'   T)primary_key2   F)uniquez
partner.idzusertype.idz{})server_default0)nullabler+   
ExperiencezExperience.user_id == User.id)backrefprimaryjoinCampaignuserzCampaign.user_id == User.idZSchoolLeaderzSchoolLeader.user_id == User.id)uselistr/   r0   ZTeacherzTeacher.user_id == User.idZParentzParent.user_id == User.idCohortDetailsz User.id == CohortDetails.user_idRegistrationzUser.id == Registration.user_idc                 C   s&   dt | j d | j d t | j S )Nz
 User: id_ z
, partner:)strr   r   r   r   r   r   r   __repr__K   s    zUser.__repr__Nc                 C   sn   ddl m}m} |r(|j|}|j}n|jd}t|||j|j	j
tjjd}tj| tj  |S )Nr   )PartnerUserTypecallin)r   r   user_type_idsignup_status)dostadmin.db_modelr9   r:   queryget_by_namer   Zget_id_with_namer   Zget_user_type_id_by_nameTypeZPARENTr'   r%   r   sessionaddcommit)clsr   partner_namer9   r:   partnerr   r2   r   r   r   add_new_userU   s    
zUser.add_new_userc                 C   s|   d }| j rxtdd | j D }|rD| j D ]}|jdkr<|jnd }q(n4tdd | j D }| j D ]}|j|krr|jnd }q^|S )Nc                 s   s   | ]}|j d kV  qdS )activeN)status.0exr   r   r   	<genexpr>k   s     z(User.get_phone_number.<locals>.<genexpr>rI   c                 s   s   | ]}|j V  qd S r	   )
start_daterK   r   r   r   rN   p   s     )experiencesanyrJ   phonemaxrO   )r   rR   	is_activerM   Zmax_dater   r   r   get_phone_numberh   s    

zUser.get_phone_numberc                 C   s(   ||_ |j}|r||d _ tj  d S )Nr   )r=   registrationr   rB   rD   )rE   r2   rJ   rV   r   r   r   update_signup_statusu   s
    
zUser.update_signup_status)N)!r    r!   r"   __tablename__r   query_classr'   r   ColumnIntegerr   Stringr   
ForeignKeyr   r<   r   Zprogram_orderr=   max_retriesrelationshiprP   	campaignsschoolleaderteacherparentcohortsrV   r8   classmethodrH   rU   rW   r   r   r   r   r      sl              
r   N)
__future__r   flask_sqlalchemyr   Zsqlalchemy.dialects.postgresqlr   
sqlalchemyr   	dostadminr   dostadmin.mixinsr   r   Modelr   r   r   r   r   <module>   s   