+
    `Øja  ã                   óÜ  € R t ^ RIHtHtHt ^ RIHt ^ RIHtH	t	H
t
Ht ^ RIHtHt ^ RIHtHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHtHt ^ R
IHtHtHt ]! 4       tRt  ! R R]4      t! ! R R]4      t" ! R R]4      t#R R lt$R R lt%R R lt&R R lt']PQ                  R]]!,          R7      ]! RRR7      R]	! ]4      ]	! ]4      3R  R! ll4       t)]PU                  R]!^ÉR"7      ]	! ]4      ]	! ]! R#R$4      4      3R% R& ll4       t+]PY                  R']!R7      ]	! ]4      ]	! ]! R#R(4      4      3R) R* ll4       t-]P]                  R'^ÌR+7      ]	! ]4      ]	! ]! R#R,4      4      3R- R. ll4       t/R/# )0uÃ  
Admin-managed dropdown lists. Each list is its own master table (see
app/models/master_list_models.py); master_list_registry names them.

GET /lookups/?category=AC_MAKE           â†’ values of one list
GET /lookups/?category=LOOKUP_CATEGORY   â†’ the lists themselves (from the registry)

Reading is open to any logged-in user because every screen needs its dropdowns;
changing values needs PRODUCTION_MASTERS permissions, the same as other masters.
)ÚListÚOptionalÚAny)ÚUUID)Ú	APIRouterÚDependsÚHTTPExceptionÚQuery)Ú	BaseModelÚField)ÚselectÚfunc)ÚIntegrityError)ÚAsyncSession)Úget_db)Úget_current_userÚrequire_permission)ÚMasterListRegistryÚMASTER_LIST_MODELSÚ	META_KEYSÚLOOKUP_CATEGORYc                   ó0   a € ] tR t^t o RtV 3R ltRtV tR# )Ú	LookupOutNc                ó¤   <€ V ^8„  d   Qh/ S[ S[,          ;R&   S[;R&   S[;R&   S[;R&   S[;R&   S[S[S[S[3,          ,          ;R&   S[;R&   # )é   Ú	lookup_idÚcategoryÚcodeÚlabelÚ
sort_orderÚmetaÚ	is_active)r   ÚstrÚintr   Údictr   Úbool)ÚformatÚ__classdict__s   "€Ú</var/www/html/audi_dev/backend/app/modules/lookups/routes.pyÚ__annotate__ÚLookupOut.__annotate__   sh   ø‡ ‚ Ù‘c�zÑñ á�Mñ ñ �Iñ ñ �Jñ	 ñ
 �Oñ ñ ‘4™™S˜•>Õ
"Ñ)ñ ñ �Oò ó    © )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r    Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©r'   s   @r(   r   r      s   ø‡ € ð &*€D÷ ƒ r+   r   c                   ót   a € ] tR t^'t o ]! R^^<R7      t]! R^xR7      t]! R^RR7      tRtRt	V 3R lt
RtV tR# )ÚLookupCreate.©Ú
min_lengthÚ
max_lengthN)r9   é,  c                óœ   <€ V ^8„  d   Qh/ S[ ;R&   S[S[ ,          ;R&   S[ ;R&   S[S[,          ;R&   S[S[S[ S[3,          ,          ;R&   # )r   r   r   r   r   r    )r"   r   r#   r$   r   )r&   r'   s   "€r(   r)   ÚLookupCreate.__annotate__'   sW   ø‡ ‚ ÙÑ;ñ á
‘3�-Ñ5ñ ñ Ñ9ñ ñ ™•Ñ$ñ	 ñ
 ‘4™™S˜•>Õ
"Ñ)ò r+   r,   )r-   r.   r/   r0   r   r   r   r   r   r    r1   r2   r3   r4   s   @r(   r6   r6   '   s>   ø‡ € Ù˜#¨!¸Ô;€HÙ °Ô5€DÙ�s q°SÔ9€EØ $€JØ%)€D÷ ƒ r+   r6   c                   óN   a € ] tR t^/t o ]! R^RR7      tRtRtRtV 3R lt	Rt
V tR# )ÚLookupUpdateNr:   r7   c                ó    <€ V ^8„  d   Qh/ S[ S[,          ;R&   S[ S[,          ;R&   S[ S[S[S[3,          ,          ;R&   S[ S[,          ;R&   # )r   r   r   r    r!   )r   r"   r#   r$   r   r%   )r&   r'   s   "€r(   r)   ÚLookupUpdate.__annotate__/   sN   ø‡ ‚ Ù‘C�=ÑDñ á™•Ñ$ñ ñ ‘4™™S˜•>Õ
"Ñ)ñ ñ ™�~Ñ$ò	 r+   r,   )r-   r.   r/   r0   r   r   r   r    r!   r1   r2   r3   r4   s   @r(   r>   r>   /   s)   ø‡ € Ù  °!ÀÔD€EØ $€JØ%)€DØ $€I÷	 ƒ r+   r>   c                ó$   € V ^8„  d   QhR\         /# )r   r   )r"   )r&   s   "r(   r)   r)   6   s   € ÷ ñ œñ r+   c                 ó~   € \         P                  ! V P                  4       4      pV'       g   \        R RV  R24      hV# )i�  zUnknown list 'Ú')r   ÚgetÚupperr   )r   Úmodels   & r(   Ú
_model_forrG   6   s7   € Ü×"Ò" 8§>¡>Ó#3Ó4€EßÜ˜C >°(°¸1Ð!=Ó>Ð>Ø€Lr+   c                ó0   € V ^8„  d   QhR\         R\        /# )r   r   Úreturn)r"   r   )r&   s   "r(   r)   r)   =   s   € ÷ Tñ T”3ð T¤	ñ Tr+   c           
      ó,  € \         P                  ! V / 4      P                  4        UUu/ uF  w  r#V\        W4      bK  	  upp;'       g    R p\	        VP
                  WP                  VP                  VP                  WAP                  R7      # u uppi )N©r   r   r   r   r   r    r!   )
r   rD   ÚitemsÚgetattrr   Úidr   r   r   r!   )r   ÚrowÚkeyÚcolr    s   &&   r(   Ú_outrR   =   su   € Ü3<·=²=ÀÈ2Ó3N×3TÑ3TÔ3VÔWÑ3V¡x sˆC”˜Ó"Ò"Ñ3VÒW×_Ð_Ð[_€DÜ˜sŸv™v°¿x¹xÈsÏyÉyØ #§¡°TÇ]Á]ôTð Tùó Xs   ©Bc                óJ   € V ^8„  d   QhR\         R\        \        ,          RR/# )r   r   r    rI   N)r"   r   r$   )r&   s   "r(   r)   r)   C   s%   € ÷ .ñ .œ#ð .¬(´4­.ð .¸Tñ .r+   c           	      óÖ   € \         P                  ! V / 4      P                  4        F?  w  r4V'       g   K  VP                  V4      f   K$  \        W\	        W#,          4      4       KA  	  R # )N)r   rD   rL   Úsetattrr#   )r   rO   r    rP   rQ   s   &&&  r(   Ú_apply_metarV   C   sD   € Ü—M’M (¨BÓ/×5Ñ5Ö7‰ˆß‰4�D—H‘H˜S“MÔ-Ü�Cœc $¥)›nÖ-ó 8r+   c                ó0   € V ^8„  d   QhR\         R\        /# )r   Údbr   )r   r   )r&   s   "r(   r)   r)   I   s   € ÷ 0ñ 0œð 0´ñ 0r+   c              ƒ  ó®   "  € \         P                  ! 4        F+  w  r#V P                  W14      G Rj  x€L
 pV'       g   K(  W$3u # 	  \        RR4      h L!5i)zCValues are addressed by id alone, so search the list tables for it.Ni”  zValue not found)r   rL   rD   r   )rX   r   r   rF   rO   s   &&   r(   Ú	_find_rowrZ   I   sM   é € ä-×3Ò3Ö5‰ˆØ—F‘F˜5Ó,×,ˆß‰3Ø�=Ò ñ 6ô ˜Ð.Ó
/Ð/ñ -ùs   ‚/A±A²	AÁ AÚ/)Úresponse_model.z6List code, or LOOKUP_CATEGORY for the lists themselves)ÚdescriptionFc                ó<   € V ^8„  d   QhR\         R\        R\        /# )r   r   Úinclude_inactiverX   )r"   r%   r   )r&   s   "r(   r)   r)   S   s&   € ÷ -ñ -Üð-äð-ô 	ñ-r+   c              ƒ   óH  "  € V P                  4       p V \        8X  dÆ   VP                  \        \        4      P                  \        P                  4      4      G R j  x€L
 P                  4       P                  4       pV Uu. uFY  p\        VP                  \        VP                  VP                  VP                  RVP                  RVP                  /RR7      NK[  	  up# \        V 4      p\        V4      pV'       g   VP                  VP                   R8H  4      pVP                  VP                  VP                  VP                  4      4      G R j  x€L
 P                  4       P                  4       pV Uu. uF  p\#        W4      NK  	  up#  EL7u upi  LCu upi 5i)Nr]   ÚtableTrK   )rE   ÚCATEGORY_REGISTRYÚexecuter   r   Úorder_byr   ÚscalarsÚallr   Ú	list_coder   r]   Ú
table_namerG   Úwherer!   rR   )	r   r_   rX   Ú_ÚregsÚrrF   ÚstmtÚrowss	   &&&&     r(   Úlist_lookupsro   R   sO  é € ð �~‰~Ó€HØÔ$Ô$Ø—j‘j¤Ô(:Ó!;×!DÑ!DÔEW×EbÑEbÓ!cÓd×d×mÑmÓo×sÑsÓuˆñ 48ó9á37¨aô  A§K¡KÔ:KÐRS×R]ÑR]Ðef×elÑelØ%&§\¡\¸ÈÏÉÐW^Ð`a×`lÑ`lÐ8mØ$(÷*á37ñ9ð 	9ô �xÓ €EÜ�%‹=€DßØ�z‰z˜%Ÿ/™/¨TÑ1Ó2ˆØ—*‘*˜TŸ]™]¨5×+;Ñ+;¸U¿[¹[ÓIÓJ×J×SÑSÓU×YÑYÓ[€DÙ'+Ó,¡t !ŒD�Ö¡tÑ,Ð,ò eùò9ñ KùÚ,ùsD   ‚AF"ÁFÁ$F"ÂAFÃ A7F"ÅFÅ$F"Å<FÆF"ÆF"ÆF")r\   Ústatus_codeÚPRODUCTION_MASTERSÚcreatec                ó0   € V ^8„  d   QhR\         R\        /# )r   ÚpayloadrX   )r6   r   )r&   s   "r(   r)   r)   i   s   € ÷ ñ Üðäñr+   c              ƒ   óD  "  € V P                   P                  4       P                  4       p\        V4      pV P                  pVf`   VP                  \        \        P                  ! VP                  4      4      4      G R j  x€L
 P                  4       ;'       g    ^ ^,           pT! V P                  ;'       g    V P                  P                  4       V P                  P                  4       VR7      p\        W6V P                  4       VP                  V4        VP                  4       G R j  x€L
  TP'                  T4      G R j  x€L
  \)        Y64      #  LÖ L*  \          d5    TP#                  4       G R j  x€L 
  \%        RRTP                   R24      hi ; i LU5i)N)r   r   r   i™  rC   z' already exists in this list)r   ÚstriprE   rG   r   rc   r   r   ÚmaxÚscalarr   r   rV   r    ÚaddÚcommitr   Úrollbackr   ÚrefreshrR   )rt   rX   rj   r   rF   r   rO   s   &&&    r(   Úcreate_lookupr}   h   sH  é € ð ×Ñ×%Ñ%Ó'×-Ñ-Ó/€HÜ�xÓ €Eà×#Ñ#€JØÒØŸZ™Z¬¬t¯xªx¸×8HÑ8HÓ/IÓ(JÓK×K×SÑSÓU×ZÐZÐYZÐ^_Õ_ˆ
á
�g—l‘l×3Ð3 g§m¡m×:Ñ:Ó<ÀGÇMÁM×DWÑDWÓDYÐfpÔ
q€CÜ�˜wŸ|™|Ô,Ø‡F�Fˆ3„KðNØ�i‰i‹k×Ðð �*‰*�S‹/×ÐÜ�ÓÐñ Lñ 	øÜô NØ�k‰k‹m×ÑÜ˜C 1 S§X¡X JÐ.KÐ!LÓMÐMðNúñ ùsa   ‚A?F ÂEÂF ÂF Â:A!F ÄE Ä/EÄ0E Ä4F ÅFÅ	F ÅE ÅFÅ:E=Å; FÆF z/{lookup_id}Úeditc                ó<   € V ^8„  d   QhR\         R\        R\        /# )r   r   rt   rX   )r   r>   r   )r&   s   "r(   r)   r)   ‚   s&   € ÷ ñ Üðäðô 	ñr+   c              ƒ   óª  "  € \        W 4      G R j  x€L
 w  rEVP                  RR7      pRV9   d   VR,          P                  4       Vn        RV9   d   VR,          Vn        RV9   d   VR,          Vn        RV9   d   \        WEVR,          4       VP                  4       G R j  x€L
  VP                  V4      G R j  x€L
  \        WE4      #  L» L* L5i)NT)Úexclude_unsetr   r   r!   r    )
rZ   Ú
model_dumprv   r   r   r!   rV   rz   r|   rR   )r   rt   rX   rj   r   rO   Údatas   &&&&   r(   Úupdate_lookupr„   �   s¹   é € ô $ BÓ2×2�M€HØ×Ñ¨DÐÓ1€DØ�$„Ø˜•M×'Ñ'Ó)ˆŒ	Ø�tÔØ˜lÕ+ˆŒØ�dÔØ˜[Õ)ˆŒØ�„~Ü�H 4¨¥<Ô0Ø
�)‰)‹+×ÐØ
�*‰*�S‹/×ÐÜ�ÓÐñ 3ñ Ùùs4   ‚C‘C’BCÂ$CÂ%CÂ=CÂ>CÃCÃC)rp   Údeletec                ó0   € V ^8„  d   QhR\         R\        /# )r   r   rX   )r   r   )r&   s   "r(   r)   r)   ˜   s   € ÷ ñ Üðäñr+   c              ƒ  ó~   "  € \        W4      G Rj  x€L
 w  r#RVn        VP                  4       G Rj  x€L
  R#  L' L5i)zASoft delete: records that already use this value keep showing it.NF)rZ   r!   rz   )r   rX   rj   rO   s   &&& r(   Údeactivate_lookuprˆ   —   s4   é € ô ˜RÓ+×+�F€AØ€C„MØ
�)‰)‹+×Òñ ,áùs   ‚=‘9’ =²;³=»=N)0Ú__doc__Útypingr   r   r   Úuuidr   Úfastapir   r   r   r	   Úpydanticr
   r   Ú
sqlalchemyr   r   Úsqlalchemy.excr   Úsqlalchemy.ext.asyncior   Úapp.core.databaser   Úapp.core.securityr   r   Úapp.models.master_list_modelsr   r   r   Úrouterrb   r   r6   r>   rG   rR   rV   rZ   rD   ro   Úpostr}   Úputr„   r…   rˆ   r,   r+   r(   Ú<module>r—      so  ðñ	÷ 'Ñ &Ý ç <Ó <ß %ß #Ý )Ý /å $ß Bß [Ñ [á	‹€à%Ð ô�	ô ô*�9ô *ô%�9ô %õõTõ.õ0ð ‡�ˆC  Y¥€Ó0á˜#Ð+cÔdØ"Ù˜v“ÙÐÓö	-ó 1ð-ð* ‡�ˆS ¸€Ó<ñ ˜v“ÙÑ Ð!5°xÓ@ÓAöó =ðð0 ‡�ˆN¨9€Ó5ñ ˜v“ÙÑ Ð!5°vÓ>Ó?ö	ó 6ðð* ‡�ˆ~¨3€Ó/ñ ˜v“ÙÑ Ð!5°xÓ@ÓAöó 0òr+   