
    i&                     4    S SK rS SKrS SKJr   " S S5      rg)    N)Configc                       \ rS rSrSr\S 5       r\S 5       r\SS j5       r\S 5       r	\S 5       r
SS	 jr\S
 5       r\S 5       rSrg)RegisteredUser   z
Model for managing registered users in the database.
This table stores metadata about the registration itself,
while user_data.json stores HRIS details.
c                  H    [         R                  R                  [        R                  [        R
                  [        R                  [        R                  [        R                  S9n U $ ! [         R                  R                   a  n[        SU 35         SnAgSnAff = f)z"Establishes a database connection.)hostportuserpassworddatabasez$Error connecting to MySQL Database: N)mysql	connectorconnectr   DB_HOSTDB_PORTDB_USERDB_PASSWORDDB_NAMEErrorprint)connes     4/var/www/fran/franai/models/registered_user_model.pyget_db_connection RegisteredUser.get_db_connection   sy    	??**^^^^^^++ + D K$$ 	8<=	s   A(A+ +B!	BB!c                  
   [         R                  5       n U (       d  g U R                  5       nUR                  S5        U R	                  5         [        S5        U R                  5       (       a!  WR                  5         U R                  5         gg! [        R                  R                   a  n[        SU 35         SnANhSnAff = f! U R                  5       (       a!  WR                  5         U R                  5         f f = f)z?Creates the registered_users table if it doesn't already exist.Na  
                CREATE TABLE IF NOT EXISTS registered_users (
                    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
                    pid INT UNSIGNED NOT NULL,
                    registered_at DATETIME NOT NULL,
                    last_modified DATETIME NOT NULL,
                    last_recognition_timestamp DATETIME NULL,
                    self_register BOOLEAN DEFAULT FALSE,
                    email_timestamp DATETIME NULL,
                    UNIQUE KEY (pid)
                )
            zA[OK] 'registered_users' table exists or was successfully created.z)Error creating 'registered_users' table: )r   r   cursorexecutecommitr   r   r   r   is_connectedclose)r   r   r   s      r   create_table_if_not_exists)RegisteredUser.create_table_if_not_exists   s     //1	[[]FNN   KKMUV   ""

 # $$ 	C=aSABB	C   ""

 #s)   <B C/C=C
 CC
 
8Dc                    [         R                  5       nU(       d  g[        R                  " 5       n UR	                  5       nSnUR                  XPX3U45        UR                  5         [        SU  S35         UR                  5       (       a!  UR                  5         UR                  5         gg! [        R                  R                   aa  n[        SU  SU 35        UR                  5          SnAUR                  5       (       a!  WR                  5         UR                  5         ggSnAff = f! UR                  5       (       a!  WR                  5         UR                  5         f f = f)	zc
Adds a new registered user or updates an existing one.
Returns True on success, False on failure.
Fa2  
                INSERT INTO registered_users (pid, registered_at, last_modified, self_register)
                VALUES (%s, %s, %s, %s)
                ON DUPLICATE KEY UPDATE
                    last_modified = VALUES(last_modified),
                    self_register = VALUES(self_register)
            z-[OK] Successfully saved registration for PID z to the database.Tz"Error saving registration for PID : Nr   r   r   get_ph_timer   r   r   r   r    r!   r   r   r   rollback)pidself_registerr   nowr   queryr   s          r   add_or_updateRegisteredUser.add_or_update:   s&    //1  "	[[]FE NN5-"@AKKMA#FWXY   ""

 # $$ 	6se2aSABMMO  ""

 #	
   ""

 #s*   AB0 0D/!D*/D2 *D//D2 28E*c                    [         R                  5       nU(       d  g UR                  5       nUR                  SU 45        UR	                  5         [        SU  S35         UR                  5       (       a!  UR                  5         UR                  5         gg! [        R                  R                   aa  n[        SU  SU 35        UR                  5          SnAUR                  5       (       a!  WR                  5         UR                  5         ggSnAff = f! UR                  5       (       a!  WR                  5         UR                  5         f f = f)	z9Deletes a registered user from the database by their PID.Fz+DELETE FROM registered_users WHERE pid = %sz[OK] Successfully deleted PID z% from the database (if they existed).TzError deleting PID z from database: N)r   r   r   r   r   r   r    r!   r   r   r   r(   )r)   r   r   r   s       r   deleteRegisteredUser.delete]   s    //1	[[]FNNH3&QKKM23%7\]^   ""

 # $$ 	'u,<QC@AMMO  ""

 #	
   ""

 #s*   AB D6!DD DD 8Ec                    [         R                  5       nU(       d  g[        R                  " 5       n UR	                  5       nSnUR                  XBU 45        UR                  5         [        SU  S35         UR                  5       (       a!  UR                  5         UR                  5         gg! [        R                  R                   aa  n[        SU  SU 35        UR                  5          SnAUR                  5       (       a!  WR                  5         UR                  5         ggSnAff = f! UR                  5       (       a!  WR                  5         UR                  5         f f = f)	z-Updates the email_timestamp for a given user.Fz?UPDATE registered_users SET email_timestamp = %s WHERE pid = %sz%[OK] Updated email timestamp for PID .Tz'Error updating email timestamp for PID r%   Nr&   )r)   r   r+   r   r,   r   s         r   update_email_timestamp%RegisteredUser.update_email_timestamps   s    //1  "	[[]FUENN5*-KKM9#a@A   ""

 # $$ 	;C51#FGMMO  ""

 #	
   ""

 #s*   AB/ /D.!D).D1 )D..D1 18E)Nc           	      6   [         R                  5       nU(       d  g UR                  SS9nSn/ n/ n	U(       a,  UR                  S5        U	R	                  SU S3SU S3/5        Ub  [        U5      S:w  a  [        U5      R                  5       S;   a#  UR                  S	5        U	R                  S
5        O?[        U5      R                  5       S;   a"  UR                  S5        U	R                  S5        Sn
U(       a  SSR                  U5      -   n
SU SU
 3nUR                  U[        U	5      5        UR                  5       S   nSnSnSnU SU SU
 SU SU 3	nU(       d$  SnU S
-
  U-  nU	R	                  UU/5        U SU 3nUR                  U[        U	5      5        UR                  5       nUUS.UR                  5       (       a!  UR                  5         UR                  5         $ $ ! [        R                  R                    aN  n[#        SU 35         SnAUR                  5       (       a!  WR                  5         UR                  5         ggSnAff = f! UR                  5       (       a!  WR                  5         UR                  5         f f = f)zL
Fetches registered users with HRIS info, supporting pagination and search.
NT
dictionarya  
                FROM
                    registered_users ru
                JOIN
                    hris_core.employee_information_tbl eit ON ru.pid = eit.pid
                LEFT JOIN
                    intra.tag_group tg ON ru.pid = tg.user_id AND tg.workspace_default = 'Y'
                LEFT JOIN
                    intra.user_group ug ON tg.group_id = ug.GID AND ug.workspace_status = 1
            zF(CONCAT(eit.first_name, ' ', eit.last_name) LIKE %s OR ru.pid LIKE %s)% )true1zru.self_register = %s   )false0z3(ru.self_register = %s OR ru.self_register IS NULL)r   zWHERE z AND z'SELECT COUNT(DISTINCT ru.pid) as total  totala  
                SELECT
                    ru.pid,
                    ru.registered_at,
                    ru.last_modified,
                    ru.last_recognition_timestamp,
                    ru.self_register,
                    ru.email_timestamp,
                    CONCAT(eit.first_name, ' ', eit.last_name) AS name,
                    eit.company_email as email,
                    MAX(ug.group_name) AS team_name
            zGROUP BY ru.pidzORDER BY ru.last_modified DESCzLIMIT %s OFFSET %s)userstotal_recordsz0Error fetching registered users with HRIS info: )r   r   r   appendextendstrlowerjoinr   tuplefetchonefetchallr    r!   r   r   r   r   )pagelimitsearch_termr*   	exportingr   r   
base_querywhere_clausesparamswhere_clausecount_queryrC   select_fieldsgroup_by_clauseorder_clausefinal_querylimit_clauseoffsetrB   r   s                        r   get_all_with_hris_info%RegisteredUser.get_all_with_hris_info   sz    //1L	[[D[1F	J MF$$%mn;-q1Q{m13EFG(S-?2-E}%++->!(()@AMM!$'--/>A!(()^_MM!$L'',,}*EE DJ<qQ]P^_KNN;f6"OO-g6MM 0O;L*O1ZL,qHYYZ[gZhiK3(e+ufo.!,Q|n=NN;f6OO%E"]C   ""

 #	 $$ 	DQCHI  ""

 #		   ""

 #s*   FG1 1III  II   8Jc                  `   [         R                  5       n U (       d  g U R                  SS9nUR                  S5        UR	                  5       nUU R                  5       (       a!  UR                  5         U R                  5         $ $ ! [        R                  R                   aN  n[        SU 35         SnAU R                  5       (       a!  WR                  5         U R                  5         ggSnAff = f! U R                  5       (       a!  WR                  5         U R                  5         f f = f)z/Fetches all registered users from the database.NTr7   zvSELECT pid, registered_at, last_modified, last_recognition_timestamp FROM registered_users ORDER BY last_modified DESCz%Error fetching all registered users: )r   r   r   r   rK   r    r!   r   r   r   r   )r   r   rB   r   s       r   get_allRegisteredUser.get_all   s     //1	[[D[1FNN  T  UOO%E
   ""

 #	 $$ 	9!=>  ""

 #		   ""

 #s)   1B C2$C-2C5 -C22C5 58D-c                 p   [         R                  5       nU(       d  g UR                  5       nUR                  SU 45        UR	                  5       nUSLUR                  5       (       a!  UR                  5         UR                  5         $ $ ! [        R                  R                   aQ  n[        SU  SU 35         SnAUR                  5       (       a!  WR                  5         UR                  5         ggSnAff = f! UR                  5       (       a!  WR                  5         UR                  5         f f = f)z4Checks if a user is already registered by their PID.Fz/SELECT pid FROM registered_users WHERE pid = %sNz$Error checking registration for PID r%   )r   r   r   r   rJ   r    r!   r   r   r   r   )r)   r   r   resultr   s        r   is_registeredRegisteredUser.is_registered   s     //1	[[]FNNLsfU__&F%
   ""

 #	 $$ 	8RsCD  ""

 #		   ""

 #s)   6B C:)C5:C= 5C::C= =8D5 )F)r=   
   NNF)__name__
__module____qualname____firstlineno____doc__staticmethodr   r"   r-   r0   r4   r[   r^   rb   __static_attributes__rd       r   r   r      s        :    D  *  0Tl  $  rm   r   )mysql.connectorr   datetimefranai.services.configr   r   rd   rm   r   <module>rq      s      )B Brm   