+
    `Øjm,  ã            	       ó  € ^ RI t ^ RIt^ RIHtHtHt ^ RIHt ^ RIH	t	 ^ RI
Ht ^ RIHt ^ RIHtHtHt ^ RIHt ^ R	IHtHtHt ^R
IHt ]! 4       t]P7                  R]]P:                  ,          R7      ]! ]4      ]! ]! RR4      4      3R R ll4       t]P?                  R]P:                  R7      ]! ]4      ]! ]! RR4      4      3R R ll4       t R8R9.t!R R lt"]P7                  R]]PF                  ,          R7      ]! ]4      ]! ]4      ]! ]! RR4      4      3R R ll4       t$]PK                  R]PF                  ^ÉR7      ]! ]4      ]! ]! RR4      4      3R R ll4       t&]P7                  R]]PN                  ,          R7      ]! ]4      ]! ]! RR4      4      3R R  ll4       t(]PS                  R]PN                  R7      ]! ]4      ]! ]! RR4      4      3R! R" ll4       t*]P7                  R#]]PV                  ,          R7      ]! ]4      ]! ]4      ]! ]! RR4      4      3R$ R% ll4       t,]PK                  R#]PV                  ^ÉR7      ]! ]4      ]! ]4      ]! ]! RR4      4      3R& R' ll4       t-]PS                  R(]PV                  R7      ]! ]4      ]! ]4      ]! ]! RR4      4      3R) R* ll4       t.]PS                  R+4      ]! ]4      ]! ]4      ]! ]! RR4      4      3R, R- ll4       t/]Pa                  R(^ÌR.7      ]! ]4      ]! ]4      ]! ]! RR/4      4      3R0 R1 ll4       t1]P7                  R24      ^d]! ]! R3R4      4      3R4 R5 ll4       t2]P7                  R64      ]! ]! R3R4      4      3R7 l4       t3R# ):é    N)Ú	APIRouterÚDependsÚHTTPException)ÚFileResponse©ÚAsyncSession)Úselect)Úget_db)Úrequire_permissionÚhash_passwordÚget_current_user)Ú
LoginUsers)Ú
RoleMasterÚModuleMasterÚRoleModulePermission)Úschemasz/modules)Úresponse_modelÚUSER_MANAGEMENTÚviewc                ó$   € V ^8„  d   QhR\         /# ©é   Údbr   )Úformats   "ÚC/var/www/html/audi_dev/backend/app/modules/access_control/routes.pyÚ__annotate__r      ó   € ÷ "ñ "Üñ"ó    c              ƒ   óÐ   "  € V P                  \        \        4      P                  \        P                  4      4      G R j  x€L
 pVP                  4       P                  4       #  L"5i©N)Úexecuter	   r   Úorder_byÚmodule_nameÚscalarsÚall©r   Ú_Úresults   && r   Úlist_modulesr)      sJ   é € ð
 —:‘:œf¤\Ó2×;Ñ;¼L×<TÑ<TÓUÓV×V€FØ�>‰>Ó×ÑÓ!Ð!ñ Wùs   ‚?A&ÁA$Á#A&z/modules/{module_code}Úeditc                óP   € V ^8„  d   QhR\         R\        P                  R\        /# )r   Úmodule_codeÚpayloadr   )Ústrr   ÚModuleToggler   )r   s   "r   r   r      s,   € ÷ ñ Üðä×!Ñ!ðô 	ñr   c              ƒ   óp  "  € VP                  \        \        4      P                  \        P                  V 8H  4      4      G R j  x€L
 P                  4       pV'       g   \        RRR7      hVP                  Vn        VP                  4       G R j  x€L
  VP                  V4      G R j  x€L
  V#  Lk L! L
5i)Né”  zModule not found©Ústatus_codeÚdetail)
r!   r	   r   Úwherer,   Úscalar_one_or_noner   Ú	is_activeÚcommitÚrefresh)r,   r-   r   r'   Úmodules   &&&& r   Útoggle_moduler;      s˜   é € ð —J‘JÜŒ|Ó×"Ñ"¤<×#;Ñ#;¸{Ñ#JÓKó÷ çÑÓð ÷ Ü¨Ð4FÔGÐGØ×(Ñ(€FÔØ
�)‰)‹+×ÐØ
�*‰*�VÓ
×ÐØ€Mññ Ùùs<   ‚AB6ÁB0ÁB6Á1B6ÂB2ÂB6Â)B4Â*B6Â2B6Â4B6c                ó$   € V ^8„  d   QhR\         /# r   r   )r   s   "r   r   r   3   s   € ÷ %ñ %¤Lñ %r   c              ƒ   ó8  "  € R p\          EF_  w  r#pV P                  \        \        4      P	                  \        P
                  V8H  4      4      G Rj  x€L
 P                  4       pV'       g6   V P                  \        \        P                  ! 4       VVVR RR7      4       RpVR8X  d   R.MRR.pV F³  pV P                  \        \        4      P	                  \        P
                  V8H  \        P                  V8H  4      4      G Rj  x€L
 P                  4       pV'       d   Ks  T P                  \        \        P                  ! 4       TTRRRR VR8X  d   RMR R7      4       RpKµ  	  EKb  	  V'       d   V P                  4       G Rj  x€L
  R# R#  EL@ LŒ L5i)	FNT©Úrole_idÚ	role_codeÚ	role_nameÚdescriptionÚis_system_roler7   ÚYARD_SUPERVISORÚYARDÚ
PRODUCTIONÚSTATION)Úidr@   r,   Úcan_viewÚ
can_createÚcan_editÚ
can_deleteÚcan_approve)ÚDEFAULT_OPERATOR_ROLESr!   r	   r   r5   r@   r6   ÚaddÚuuidÚuuid4r   r,   r8   )	r   ÚchangedÚcodeÚnameÚdescÚexistingÚdefault_modulesÚmodÚperms	   &        r   Úensure_operator_rolesrZ   3   sp  é € Ø€Gß2Ð2Ñˆ�DØŸ*™*¤V¬JÓ%7×%=Ñ%=¼j×>RÑ>RÐVZÑ>ZÓ%[Ó\×\×pÑpÓrˆßØ�F‰F”:ÜŸ
š
›ØØØ Ø$Øôô ð ˆGð '+Ð.?Ô&?˜6™(ÀlÐT]ÐE^ˆÛ"ˆCØŸ*™*ÜÔ+Ó,×2Ñ2Ü(×2Ñ2°dÑ:Ü(×4Ñ4¸Ñ;óó÷ ÷
 "Ñ!Ó#ð ÷ ‘4Ø—‘Ô+Ü—z’z“|Ø"Ø #Ø!Ø#Ø!Ø$Ø(,Ð0AÔ(A¡Àuô	ô 	ð ’ô% #ñ 3÷D Ø�i‰i‹k×Òñ òC ]ññ& 	ùsJ   ‚AFÁFÁFÁ.BFÄ	FÄ
FÄ&AFÅ7FÆ
FÆ	FÆFÆFz/rolesc                ó0   € V ^8„  d   QhR\         R\        /# ©r   r   Úcurrent_user©r   r   )r   s   "r   r   r   \   s   € ÷ 
"ñ 
"Üð
"äñ
"r   c              ƒ   ód  "  € \        V 4      G R j  x€L
  \        \        4      pVP                  R8w  d#   VP	                  \        P                  R8g  4      pV P                  VP                  \        P                  4      4      G R j  x€L
 pVP                  4       P                  4       #  Lš L$5i)NÚADMIN)
rZ   r	   r   r@   r5   r!   r"   rA   r$   r%   ©r   r]   r'   Úqueryr(   s   &&&  r   Ú
list_rolesrc   [   s‡   é € ô   Ó
#×#Ð#Ü”:Ó€EØ×Ñ Ô(Ø—‘œJ×0Ñ0°GÑ;Ó<ˆØ—:‘:˜eŸn™n¬Z×-AÑ-AÓBÓC×C€FØ�>‰>Ó×ÑÓ!Ð!ñ $ñ Dùs"   ‚B0‘B,’A7B0Â	B.Â
#B0Â.B0)r   r3   Úcreatec                óD   € V ^8„  d   QhR\         P                  R\        /# ©r   r-   r   )r   Ú
RoleCreater   )r   s   "r   r   r   j   s"   € ÷ ñ Ü×Ñðäñr   c           	   ƒ   óD  "  € VP                  \        \        4      P                  \        P                  V P                  8H  4      4      G R j  x€L
 P                  4       pV'       d   \        RRR7      h\        \        P                  ! 4       V P                  P                  4       P                  RR4      V P                  V P                  RRR7      pVP                  V4       VP                  4       G R j  x€L
  VP                  V4      G R j  x€L
  V#  LË L! L
5i)	Né�  zRole code already existsr2   Ú r'   FTr>   )r!   r	   r   r5   r@   r6   r   rP   rQ   ÚupperÚreplacerA   rB   rO   r8   r9   )r-   r   r'   rV   Úroles   &&&  r   Úcreate_rolern   i   sç   é € ð —j‘jÜŒzÓ× Ñ ¤×!5Ñ!5¸×9JÑ9JÑ!JÓKó÷ çÑÓð ÷ Ü¨Ð4NÔOÐOÜÜ—
’
“Ø×#Ñ#×)Ñ)Ó+×3Ñ3°C¸Ó=Ø×#Ñ#Ø×'Ñ'ØØô€Dð ‡F�Fˆ4„LØ
�)‰)‹+×ÐØ
�*‰*�TÓ
×ÐØ€Kñ!ñ Ùùs=   ‚AD ÁDÁD Á)BD Ã:DÃ;D ÄDÄD ÄD ÄD z/matrixc                ó$   € V ^8„  d   QhR\         /# r   r   )r   s   "r   r   r   „   r   r   c              ƒ   ó–   "  € V P                  \        \        4      4      G R j  x€L
 pVP                  4       P	                  4       #  L"5ir    )r!   r	   r   r$   r%   r&   s   && r   Ú
get_matrixrq   ƒ   s9   é € ð
 —:‘:œfÔ%9Ó:Ó;×;€FØ�>‰>Ó×ÑÓ!Ð!ñ <ùs   ‚"A	¤A¥#A	c                óD   € V ^8„  d   QhR\         P                  R\        /# rf   )r   ÚPermissionMatrixRowr   )r   s   "r   r   r   �   s"   € ÷ ñ Ü×(Ñ(ðäñr   c              ƒ   ó®  "  € VP                  \        \        4      P                  \        P                  V P                  8H  \        P
                  V P
                  8H  4      4      G R j  x€L
 P                  4       pVfG   \        \        P                  ! 4       V P                  V P
                  R7      pVP                  V4       V P                  Vn
        V P                  Vn        V P                  Vn        V P                  Vn        V P                  Vn        VP                  4       G R j  x€L
  VP!                  V4      G R j  x€L
  V#  Lä L! L
5i)N)rH   r@   r,   )r!   r	   r   r5   r@   r,   r6   rP   rQ   rO   rI   rJ   rK   rL   rM   r8   r9   )r-   r   r'   Úrows   &&& r   Úupsert_matrix_rowrv   Œ   s  é € ð —‘ÜÔ#Ó$×*Ñ*Ü ×*Ñ*¨g×.?Ñ.?Ñ?Ü ×,Ñ,°×0CÑ0CÑCó	
ó÷ ÷
 ÑÓð ð ‚{Ü"Ü�zŠz‹| w×'8Ñ'8Àg×FYÑFYô
ˆð 	�‰ˆsŒØ×#Ñ#€C„LØ×'Ñ'€C„NØ×#Ñ#€C„LØ×'Ñ'€C„NØ×)Ñ)€C„OØ
�)‰)‹+×ÐØ
�*‰*�S‹/×ÐØ€Jñ%ñ  Ùùs7   ‚A(EÁ*EÁ+CEÄ/EÄ0EÅEÅ	EÅEÅEz/usersc                ó0   € V ^8„  d   QhR\         R\        /# r\   r^   )r   s   "r   r   r   ©   s   € ÷ 	"ñ 	"Üð	"äñ	"r   c              ƒ   ó:  "  € \        \        4      pVP                  R 8w  d#   VP                  \        P                  R 8g  4      pV P	                  VP                  \        P                  4      4      G Rj  x€L
 pVP                  4       P                  4       #  L"5i)r`   N)	r	   r   r@   r5   r!   r"   rT   r$   r%   ra   s   &&&  r   Ú
list_usersry   ¨   sq   é € ô ”:Ó€EØ×Ñ Ô(Ø—‘œJ×0Ñ0°GÑ;Ó<ˆØ—:‘:˜eŸn™n¬Z¯_©_Ó=Ó>×>€FØ�>‰>Ó×ÑÓ!Ð!ñ ?ùs   ‚A4BÁ6BÁ7#Bc                óP   € V ^8„  d   QhR\         P                  R\        R\        /# )r   r-   r   r]   )r   Ú
UserCreater   r   )r   s   "r   r   r   ¶   s,   € ÷ ñ Ü×Ñðäðô ñr   c              ƒ   ó¸  "  € VP                   R 8w  d   V P                   R 8X  d   \        RRR7      hVP                  \        \        4      P                  \        P                  V P                  8H  4      4      G Rj  x€L
 P                  4       pV'       d   \        RRR7      h\	        \        P                  ! 4       V P                  V P                  V P                  V P                  V P                   \        V P                  4      RR7      pVP                  V4       VP!                  4       G Rj  x€L
  VP#                  V4      G Rj  x€L
  V#  LÖ L! L
5i)	r`   é“  úCannot assign ADMIN roler2   Nri   zEmployee code already existsT)Úuser_idÚemployee_coderT   ÚmobileÚemailr@   Úpassword_hashr7   )r@   r   r!   r	   r   r5   r€   r6   rP   rQ   rT   r�   r‚   r   ÚpasswordrO   r8   r9   )r-   r   r]   r'   rV   Úusers   &&&&  r   Úcreate_userr†   µ   s  é € ð ×Ñ Ô(¨W×->Ñ->À'Ô-IÜ¨Ð4NÔOÐOØ—j‘jÜŒzÓ× Ñ ¤×!9Ñ!9¸W×=RÑ=RÑ!RÓSó÷ çÑÓð ÷ Ü¨Ð4RÔSÐSÜÜ—
’
“Ø×+Ñ+Ø�\‰\Ø�~‰~Ø�m‰mØ×#Ñ#Ü# G×$4Ñ$4Ó5Øô	€Dð ‡F�Fˆ4„LØ
�)‰)‹+×ÐØ
�*‰*�TÓ
×ÐØ€Kñ%ñ  Ùùs=   ‚A;EÁ=EÁ>EÂBEÄ4EÄ5EÅEÅEÅEÅEz/users/{user_id}c                óp   € V ^8„  d   QhR\         P                  R\        P                  R\        R\
        /# ©r   r   r-   r   r]   )rP   ÚUUIDr   Ú
UserUpdater   r   )r   s   "r   r   r   Ô   s:   € ÷ ñ Ü�Y‰Yðä×Ñðô 	ðô ñ	r   c              ƒ   ó
  "  € VP                  \        V 4      G R j  x€L
 pV'       g   \        RRR7      hVP                  R8w  d   VP                  R8X  d   \        RRR7      hVP                  R8w  d    \	        VRR 4      R8X  d   \        RRR7      hVP                  R	R
7      P                  4        F  w  rg\        WVV4       K  	  VP                  4       G R j  x€L
  VP                  V4      G R j  x€L
  V#  Là L! L
5i)Nr1   úUser not foundr2   r`   r}   zCannot edit ADMIN usersr@   r~   T)Úexclude_unset)
Úgetr   r   r@   ÚgetattrÚ
model_dumpÚitemsÚsetattrr8   r9   )r   r-   r   r]   r'   r…   ÚfieldÚvalues   &&&&&   r   Úupdate_userr•   Ó   sà   é € ð —‘œ
 GÓ,×,€DßÜ¨Ð4DÔEÐEØ×Ñ Ô(¨T¯^©^¸wÔ-FÜ¨Ð4MÔNÐNØ×Ñ Ô(¬W°W¸kÈ4Ó-PÐT[Ô-[Ü¨Ð4NÔOÐOØ×*Ñ*¸Ð*Ó>×DÑDÖF‰ˆÜ�˜UÖ#ñ Gà
�)‰)‹+×ÐØ
�*‰*�TÓ
×ÐØ€Kñ -ñ Ùùs9   ‚DœC=�D©B4DÃC?ÃDÃ6DÃ7DÃ?DÄDz/users/{user_id}/passwordc                óp   € V ^8„  d   QhR\         P                  R\        P                  R\        R\
        /# rˆ   )rP   r‰   r   ÚPasswordResetr   r   )r   s   "r   r   r   ê   s:   € ÷ +ñ +Ü�Y‰Yð+ä×"Ñ"ð+ô 	ð+ô ñ	+r   c              ƒ   óB  "  € VP                  \        V 4      G R j  x€L
 pV'       g   \        RRR7      hVP                  R8w  d   VP                  R8X  d   \        RRR7      h\	        VP
                  4      Vn        VP                  4       G R j  x€L
  RR/#  L~ L
5i)	Nr1   rŒ   r2   r`   r}   z$Cannot reset password of ADMIN usersÚmessagezPassword updated)rŽ   r   r   r@   r   Únew_passwordrƒ   r8   )r   r-   r   r]   r'   r…   s   &&&&& r   Úreset_passwordr›   é   sŠ   é € ð —‘œ
 GÓ,×,€DßÜ¨Ð4DÔEÐEØ×Ñ Ô(¨T¯^©^¸wÔ-FÜ¨Ð4ZÔ[Ð[Ü& w×';Ñ';Ó<€DÔØ
�)‰)‹+×ÐØÐ)Ð*Ð*ñ -ñ ùs'   ‚BœB�B©A)BÂBÂ	BÂB)r3   Údeletec                óP   € V ^8„  d   QhR\         P                  R\        R\        /# )r   r   r   r]   )rP   r‰   r   r   )r   s   "r   r   r   û   s*   € ÷ ñ Ü�Y‰Yðäðô ñr   c              ƒ   ó  "  € VP                  \        V 4      G R j  x€L
 pV'       g   \        RRR7      hVP                  R8X  d   \        RRR7      hVP	                  V4      G R j  x€L
  VP                  4       G R j  x€L
  R #  Lj L  L
5i)Nr1   rŒ   r2   r`   r}   zCannot delete ADMIN users)rŽ   r   r   r@   rœ   r8   )r   r   r]   r'   r…   s   &&&& r   Údelete_userrŸ   ú   su   é € ð —‘œ
 GÓ,×,€DßÜ¨Ð4DÔEÐEØ‡~�~˜Ô Ü¨Ð4OÔPÐPØ
�)‰)�D‹/×ÐØ
�)‰)‹+×ÐÙñ -ñ
 Ùùs8   ‚BœB�B©?BÁ(B	Á)BÂ BÂBÂ	BÂBz/logsÚSYSTEM_LOGSc                ó$   € V ^8„  d   QhR\         /# )r   Úlines)Úint)r   s   "r   r   r     s   € ÷ =ñ =Üñ=r   c              ƒ   óÌ  "  € \         P                  P                  \         P                  ! 4       R R4      p\         P                  P	                  V4      '       g   R R/#  \        VRRR7      ;_uu_ 4       pVP                  4       pR RP                  W@) R 4      /uuRRR4       #   + '       g   i     R# ; i  \         d   pR R\        T4       2/u Rp?# Rp?ii ; i5i)	Úlogsú	error.logzNo log file found.Úrzutf-8)ÚencodingÚ NzError reading log file: )	ÚosÚpathÚjoinÚgetcwdÚexistsÚopenÚ	readlinesÚ	Exceptionr.   )r¢   r'   Úlog_pathÚfÚ	all_linesÚes   &&    r   Úget_system_logsr¶     s±   é € ô
 �w‰w�|‰|œBŸIšI›K¨°Ó=€HÜ�7‰7�>‰>˜(×#Ò#ØÐ,Ð-Ð-ð=Ü�(˜C¨'×2Õ2°aØŸ™›ˆIØ˜BŸG™G I¨f¨gÐ$6Ó7Ð8÷ 3×2×2Ó2ûô ô =ØÐ2´3°q³6°(Ð;Ð<Õ<ûð=üsZ   ‚AC$Á!B< Á7&B(Â
B< Â'C$Â(B9	Â3B< Â7C$Â9B< Â<C!ÃCÃC!ÃC$ÃC!Ã!C$z/logs/downloadc              ƒ   óò   "  € \         P                  P                  \         P                  ! 4       R R4      p\         P                  P	                  V4      '       g   \        RRR7      h\        VRRR7      # 5i)r¥   r¦   r1   zLog file not found.r2   z
text/plain)r«   ÚfilenameÚ
media_type)rª   r«   r¬   r­   r®   r   r   )r'   r²   s   & r   Údownload_system_logsrº     sZ   é € ô �w‰w�|‰|œBŸIšI›K¨°Ó=€HÜ�7‰7�>‰>˜(×#Ò#Ü¨Ð4IÔJÐJäØØØôð ùs   ‚A5A7)rD   zYard SupervisorzDOversees Yard operations, Chassis Inward, Station Scanning & Reports)ÚPRODUCTION_SUPERVISORzProduction Supervisorz9Shopfloor station scanning, timers & chassis flow control)4rP   rª   Úfastapir   r   r   Úfastapi.responsesr   Úsqlalchemy.ext.asyncior   Ú
sqlalchemyr	   Úapp.core.databaser
   Úapp.core.securityr   r   r   Úapp.models.core_modelsr   Úapp.models.access_modelsr   r   r   r©   r   ÚrouterrŽ   ÚlistÚ	ModuleOutr)   Úpatchr;   rN   rZ   ÚRoleOutrc   Úpostrn   rs   rq   Úputrv   ÚUserOutry   r†   r•   r›   rœ   rŸ   r¶   rº   © r   r   Ú<module>rÍ      s­  ðÛ Û 	ß 5Ñ 5Ý *Ý /Ý å $ß QÑ QÝ -ß SÑ SÝ á	‹€ð ‡�ˆJ t¨G×,=Ñ,=Õ'>€Ó?á˜v“ÙÑ Ð!2°FÓ;Ó<ö"ó @ð"ð ‡�Ð&°w×7HÑ7H€ÓIñ ˜v“ÙÑ Ð!2°FÓ;Ó<ö	ó Jðð& sØsðÐ õ
%ðP ‡�ˆH T¨'¯/©/Õ%:€Ó;á˜v“Ù&Ð'7Ó8ÙÑ Ð!2°FÓ;Ó<ö
"ó <ð
"ð ‡�ˆX g§o¡oÀ3€ÓGñ ˜v“ÙÑ Ð!2°HÓ=Ó>öó Hðð2 ‡�ˆI d¨7×+FÑ+FÕ&G€ÓHá˜v“ÙÑ Ð!2°FÓ;Ó<ö"ó Ið"ð ‡�ˆI g×&AÑ&A€ÓBñ ˜v“ÙÑ Ð!2°FÓ;Ó<öó Cðð6 ‡�ˆH T¨'¯/©/Õ%:€Ó;á˜v“Ù&Ð'7Ó8ÙÑ Ð!2°FÓ;Ó<ö	"ó <ð	"ð ‡�ˆX g§o¡oÀ3€ÓGñ ˜v“Ù&Ð'7Ó8ÙÑ Ð!2°HÓ=Ó>ö	ó Hðð: ‡�Ð¨w¯©€Ó?ñ ˜v“Ù&Ð'7Ó8ÙÑ Ð!2°FÓ;Ó<öó @ðð* ‡�Ð'Ó(ñ ˜v“Ù&Ð'7Ó8ÙÑ Ð!2°FÓ;Ó<ö+ó )ð+ð  ‡�Ð!¨s€Ó3ñ ˜v“Ù&Ð'7Ó8ÙÑ Ð!2°HÓ=Ó>ö	ó 4ðð" ‡�ˆGÓàÙÑ  °Ó7Ó8ö=ó ð=ð  ‡�ÐÓáÑ  °Ó7Ó8óó òr   