
    yj                     z    d dl Z d dlmZmZmZ d dlmZ  e j                  e      Z	 G d dej                        Zy)    N)_apimodels)	UserErrorc                   \     e Zd ZdZd Zd Zd Zej                   fd       Z	 fdZ
 xZS )
HrEmployeezhr.employeec                     | j                          | j                  }|sy| j                  xs | j                  xs d}dj	                  d |D              }t        |      dk  ry||dd fS )a9  login = xeno_employee_code (xeno_attendance's own auto-generated
        employee code -- same convention already used for the placeholder
        approver logins in xeno_leave). password = the last 4 digits of ID
        Card Number, falling back to Passport Number if no ID card number
        is on file. Returns (login, password) or (False, False) if either
        piece isn't available yet -- this is checked on both create and
        write so it fires whichever of "code" and "ID/passport number"
        happens to be filled in last, not just at creation time.)FF c              3   B   K   | ]  }|j                         s|  y wN)isdigit).0chs     M/home/susu/odoo-hr-migration/xeno_theme_slate/models/hr_employee_auto_user.py	<genexpr>z7HrEmployee._xeno_auto_login_password.<locals>.<genexpr>   s     =

=s      N)
ensure_onexeno_employee_codeidentification_idpassport_idjoinlen)selfloginsourcedigitss       r   _xeno_auto_login_passwordz$HrEmployee._xeno_auto_login_password   sm     	''''A4+;+;Ar=f==v;?fRSk!!    c                 r   | D ]1  }|j                   r|j                         \  }}|s'| j                  d   j                         j	                  dd|fg      r-t
        j                  d|j                  |j                  |       | j                  d   j                         j                  d      j                  |j                  ||dd| j                  j                  d	      j                  gfgd
      }|j                  |j                         _         |j                  t        d|             4 y )Nz	res.usersr   =zsxeno_theme_slate: skipped auto-creating a login for employee %s (id %s) -- login %r already exists on another user.T)no_reset_password   r   zbase.group_user)namer   password	group_idsz,Self-service login auto-created (login: %s).body)user_idr   envsudosearch_count_loggerwarningr$   idwith_contextcreaterefmessage_postr   )r   employeer   r%   users        r   _xeno_auto_create_userz!HrEmployee._xeno_auto_create_user   s    	aH&@@BOE8xx$))+887C:O9PQMMM8;;7 88K(--/<<t<T[[ $ !dhhll3D&E&H&H%IJK	] D '+ggHMMO#!!q)WY^'_!`'	ar   c           	      r   | j                          | j                  j                  j                  d      st	        t        d            | j                  st	        t        d| j                              | j                         \  }}|st	        t        d| j                              | j                  j                         j                  d|i       | j                  t        d| j                  j                  j                               d	d
dt        d      t        d| j                  |      dddS )a  HR-facing "Reset Password" button (hr_employee_reset_password_
        views.xml) -- resets the employee's login back to the SAME default
        this deployment already uses for a brand-new login (last 4 digits
        of ID Card/Passport, see _xeno_auto_login_password() above), rather
        than an arbitrary HR-typed password: predictable, and there's
        nothing new for HR to communicate out-of-band since the employee
        already knows to try their own ID/passport digits. Settings > Users
        itself is Administrator-only in this deployment (hr.group_hr_user
        doesn't include base.group_system), so this is the one narrow,
        explicitly-gated write HR needs -- not a broader admin grant.zhr.group_hr_userz/Only HR can reset an employee's login password.z%s doesn't have a login yet.zrCan't compute a default password for %s -- no ID Card or Passport number on file to derive the last 4 digits from.r%   z!Login password reset by %(user)s.)r5   r'   zir.actions.clientdisplay_notificationsuccesszPassword Resetz3%(name)s's password has been reset to: %(password)s)r$   r%   T)typetitlemessagesticky)r:   tagparams)r   r*   r5   	has_groupr   r   r)   r$   r   r+   writer3   )r   r   r%   s      r   action_xeno_reset_user_passwordz*HrEmployee.action_xeno_reset_user_password5   s    	xx}}&&'9:AOPQQ||A<diiHII88:xAL		   	!!:x"89q!D488==K]K]^_')!+,R#'99xA

 
	
r   c                 F    t         |   |      }|j                          |S r   )superr1   r6   )r   	vals_listrecords	__class__s      r   r1   zHrEmployee.create^   s"    '.+&&(r   c                 f    t         |   |      }h dt        |      z  r| j                          |S )N>   r   r   r   )rD   rA   setr6   )r   valsresultrG   s      r   rA   zHrEmployee.writed   s.    t$ED	Q'')r   )__name__
__module____qualname___inheritr   r6   rB   r   model_create_multir1   rA   __classcell__)rG   s   @r   r   r   	   s=    H"&a,'
R 	 
 r   r   )loggingodoor   r   r   odoo.exceptionsr   	getLoggerrL   r-   Modelr    r   r   <module>rX      s5       %
'

H
%_ _r   