
    i                         d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlmZ  ee      Zee	   Zed   Z G d d	      Zy)
    N)datetimetimezone)
MailHelper)	MONGO_URIDB_NAME)MongoClient)ObjectIdusersc            	           e Zd Zedd       Zedededefd       Zededefd       Z	ed	ed
edefd       Z
ed	edededefd       Zed	efd       Zy)
StaffModelc                     t         j                  t         j                  z   dj                  fdt	        |       D              S )N c              3   H   K   | ]  }t        j                          y w)N)randomchoice).0_
characterss     2/var/www/pod-logistic/pod-api/model/staff_model.py	<genexpr>z6StaffModel.generate_random_password.<locals>.<genexpr>   s     HQv}}Z0Hs   ")stringascii_lettersdigitsjoinrange)lengthr   s    @r   generate_random_passwordz#StaffModel.generate_random_password   s0    ))FMM9
wwH%-HHH    nameemailpermissionsc           	         | j                  d      }t        t        j                               }t	        j
                  t        j                        j                  d      }||dd}||||dd||d}t        j                  ||       t        j                  d|i      }	|	rt        d	      t        j                  |       d
|v rt        |d
         |d
<   |S )N   z%Y-%m-%dT%H:%M:%S.000ZuY   Đây là tài khoản Staff của bạn. Hãy đổi mật khẩu sau khi đăng nhập.usernamepasswordnotestaffactive)idr   r    r&   rolestatusr!   	createdAtr    u*   Email đã tồn tại trong hệ thống!_id)r   struuiduuid4r   nowr   utcstrftimer   send_new_password_email
collectionfind_one	Exception
insert_one)
clsr   r    r!   raw_passwordstaff_id
created_at	mail_data	new_staffexisting_users
             r   create_staffzStaffModel.create_staff   s    33A6tzz|$\\(,,/889QR
 $o
	 $&#	
	 	**5)<"++We,<=HIIi(I"9U#34Ier   user_permissionsrequired_permissionc                     d| v ry|| v S )u   
        Kiểm tra xem quyền yêu cầu có nằm trong danh sách quyền của user hay không.
        Đây là logic động, thay thế cho logic chặn cứng "is_authorized" cũ.
        adminT )rB   rC   s     r   check_accesszStaffModel.check_access5   s     &&"&666r   r<   old_passwordnew_passwordc                     	 t        |      dd}t        j                  |      }|sy|j	                  d      |k7  ryt        j                  |dd|ii       y# t        $ r |dd}Y Xw xY w)	Nr(   )r.   r+   )r*   r+   )Fu3   Tài khoản không tồn tại trên hệ thống!r&   )Fu-   Mật khẩu hiện tại không chính xác!$set)Tu!   Đổi mật khẩu thành công!)r	   r8   r6   r7   get
update_one)r:   r<   rH   rI   queryr(   s         r   change_passwordzStaffModel.change_password@   s~    	6$X.@E
 ##E*O 99Z L0I 	efz<.H%IJ8  	6#W5E	6s   A A)(A)r,   c                 n    	 dt        |      i}t        j                  |d|||di      }y#  d|i}Y %xY w)Nr.   r*   rK   )r    r,   r!   )Tu&   Cập nhật nhân viên thành công!)r	   r6   rM   )r:   r<   r    r,   r!   rN   results          r   update_staffzStaffModel.update_staffV   sW    	%HX./E && * 
 >	%8$Es   , 4c                 x   	 dt        |      i}t        j                  |      }|sy| j                  d      }t        j	                  |dd|ii       |j                  dd      |d	d
}	 t        j                  |d   |       dd|d    dfS #  d|i}Y xY w# t        $ r}t        d|        Y d }~2d }~ww xY w)Nr.   r*   )Fu   Không tìm thấy nhân viên!r#   rK   r&   r   Staffup   Mật khẩu của bạn vừa được Admin đặt lại. Hãy đổi mật khẩu ngay sau khi đăng nhập.r$   r    u   Lỗi gửi mail: Tu4   Đã tạo mật khẩu mới và gửi email tới !)
r	   r6   r7   r   rM   rL   r   r5   r8   print)r:   r<   rN   r(   r;   r>   es          r   admin_reset_passwordzStaffModel.admin_reset_passwordg   s    	%HX./E ##E*; 33A6 	efz<.H%IJ 		&'2$ G
	
	,..uW~yI KERYNK[[\]]]1	%8$E(  	,&qc*++	,s#   B )B B	B9!B44B9N)r#   )__name__
__module____qualname__staticmethodr   classmethodr/   listrA   rG   rO   rR   rX   rF   r   r   r   r      s    I I  C d  @ 7t 7# 7 7 9s 9# 9S 9 9* >C > >S >t > >  ^C ^ ^r   r   )r   r   r0   r   r   controller.mail_helperr   MongoDBConnectionr   r   pymongor   bson.objectidr	   clientdbr6   r   rF   r   r   <module>re      sG       ' - 0  "	Y	G_[
u^ u^r   