
    jJh                         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e      Z G d	 d
ee
j                        Zy)    )absolute_import)Query)JSONB)func)db)TimestampMixinc                   *    e Zd Zd Zd Zd Zd Zd Zy)	UserQueryc                 b    | j                  t        j                  |k(        j                         S N)filterUseridfirst)selfuser_ids     -/var/www/dostadmin/dostadmin/db_model/user.pyget_user_by_idzUserQuery.get_user_by_id
   s#    {{477g-.4466    c                     |dk(  r| j                         }|S | j                  t        j                  t        j
                        t        j                  |      k(        j                         }|S )N )get_users_logr   r   lowerr   nameall)r   r   userss      r   get_users_by_namezUserQuery.get_users_by_name   sc     rz   	
  TZZ		2djj6FFGKKM 	
 r   c                 b    | j                  t        j                  |k(        j                         S r   )r   r   
partner_idr   )r   r   s     r   get_users_by_partnerzUserQuery.get_users_by_partner   s#    {{4??j89==??r   c                 "    | j                         S r   )r   r   s    r   r   zUserQuery.get_users_log   s    xxzr   c                 |    | j                  t        j                  j                  |            j	                          y r   )r   r   r   in_r   )r   user_idss     r   get_users_by_idszUserQuery.get_users_by_ids   s$    DGGKK)*..0r   N)__name__
__module____qualname__r   r   r    r   r&    r   r   r
   r
   	   s    7@1r   r
   c                   h   e Zd ZdZeZ G d d      Z ej                  ej                  d      Z
 ej                   ej                  d      d      Z ej                  ej                   ej                  d	            Z ej                  ej                   ej                  d
            Z ej                  ed      Z ej                   ej                  d      d      Z ej                  ej                  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      Z ej(                  ddd       Zd! Zed&d#       Zd$ Zed%        Z y")'r   r   c                       e Zd ZdZdZy)User.Status
incompletecompleteN)r'   r(   r)   
INCOMPLETECOMPLETEr*   r   r   Statusr-   #   s    !
r   r2   T)primary_key2   F)uniquez
partner.idzusertype.idz{})server_default0)nullabler6   
ExperienceuserzExperience.user_id == User.id)back_populatesprimaryjoinCampaignzCampaign.user_id == User.id)backrefr<   SchoolLeaderzSchoolLeader.user_id == User.id)uselistr>   r<   TeacherzTeacher.user_id == User.idParentzParent.user_id == User.idCohortDetailsz User.id == CohortDetails.user_idRegistrationzUser.id == Registration.user_idc                     dt        | j                        z   dz   | j                  z   dz   t        | j                        z   S )Nz
 User: id_ z
, partner:)strr   r   r   r"   s    r   __repr__zUser.__repr__M   sM    $''l ii 	
 $//"#	
r   Nc                    ddl m}m} |r(|j                  j	                  |      }|j
                  }n|j                  j                  d      }t        |||j                  j                  |j                  j                        t        j                  j                        }t        j                  j                  |       t        j                  j!                          |S )Nr   )PartnerUserTypecallin)r   r   user_type_idsignup_status)dostadmin.db_modelrJ   rK   queryget_by_namer   get_id_with_namer   get_user_type_id_by_nameTypePARENTr2   r0   r   sessionaddcommit)clsr   partner_namerJ   rK   partnerr   r:   s           r   add_new_userzUser.add_new_userW   s    8mm//=G J 77AJ!!@@AUAUV++00	
 	

t


r   c                 R   d }| j                   rt        d | j                   D              }|r0| j                   D ]  }|j                  dk(  r|j                  nd }! |S t	        d | j                   D              }| j                   D ]  }|j
                  |k(  r|j                  nd }! |S )Nc              3   :   K   | ]  }|j                   d k(    yw)activeN)status.0exs     r   	<genexpr>z(User.get_phone_number.<locals>.<genexpr>m   s     M<LbBII1<Ls   r_   c              3   4   K   | ]  }|j                     y wr   )
start_datera   s     r   rd   z(User.get_phone_number.<locals>.<genexpr>r   s     H7Gr}}7Gs   )experiencesanyr`   phonemaxrf   )r   ri   	is_activerc   max_dates        r   get_phone_numberzUser.get_phone_numberj   s    MD<L<LMMI**B(*		X(=BHH4E +  Ht7G7GHH**B(*(ABHHtE +r   c                 ~    ||_         |j                  }|r
||d   _         t        j                  j	                          y )Nr   )rN   registrationr   rV   rX   )rY   r:   r`   ro   s       r   update_signup_statuszUser.update_signup_statusw   s4    #((,2LO)


r   r   )!r'   r(   r)   __tablename__r
   query_classr2   r   ColumnIntegerr   Stringr   
ForeignKeyr   rM   r   program_orderrN   max_retriesrelationshiprg   	campaignsschoolleaderteacherparentcohortsro   rH   classmethodr\   rm   rp   r*   r   r   r   r      s   MK  
2::4	0B299YRYYr]51D2::}r}}\'BCJ299RZZ})EFLBIIeD9MBIIibiimE:M"))BJJsKK!"//V9XK  F0MI #2??5	L boo0	G R__%=XF boo5WG #2??5L
  $  r   r   N)
__future__r   flask_sqlalchemy.queryr   	BaseQuerysqlalchemy.dialects.postgresqlr   
sqlalchemyr   	dostadminr   dostadmin.mixinsr   r
   Modelr   r*   r   r   <module>r      s7    & 5 0   +1	 1,a>288 ar   