+
    `Øj!  ã            
       óâ  € ^ 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Ht ^RIHt ^RIHtHtHtHt ^ R	IHt ^ R
IHtHtHt ^ RIHt ]! 4       t ] PC                  R]],          R7      RR]! ]	4      ]! ]! RR4      4      3R R ll4       t"] PC                  R]#R7      ]! ]	4      ]! ]! RR4      4      3R R ll4       t$] PK                  R]#R7      ]! ]	4      ]! ]! RR4      4      3R R ll4       t&] PK                  R]'R7      ]! ]	4      ]! ]! RR4      4      3R R ll4       t(] PC                  R]],          R7      RR]! ]	4      ]! ]! RR4      4      3R R ll4       t)R# ) é    )Ú	APIRouterÚDependsÚHTTPException)ÚAsyncSession)Úselect)Úget_db)Úrequire_permission)ÚRmInventoryÚRmInventoryLogÚRmMasterÚStoreMaster)ÚInventoryService)ÚStockBalanceResponseÚConsumptionRequestÚTransferRequestÚInventoryLedgerResponse)ÚUUID)ÚListÚOptionalÚcast)ÚDecimalz	/balances)Úresponse_modelNÚ	INVENTORYÚviewc                óh   € V ^8„  d   QhR\         \        ,          R\         \        ,          R\        /# ©é   Úrm_idÚstore_idÚdb©r   r   r   )Úformats   "Ú>/var/www/html/audi_dev/backend/app/modules/inventory/routes.pyÚ__annotate__r$      s.   € ÷ *ñ *Ü”D�>ð*ä”t�nð*ô 	ñ*ó    c              ƒ  ó€  "  € \        \        \        \        4      P	                  \        \        P
                  \        P
                  8H  4      P	                  \        \        P                  \        P                  8H  4      pV '       d#   VP                  \        P
                  V 8H  4      pV'       d#   VP                  \        P                  V8H  4      pVP                  V4      G Rj  x€L
 pVP                  4       p. pV EF1  w  r‰p
TP                  \        VP                  VP
                  VP                  \        \        \        VP                   4      4      VP"                  e$   \        \        \        VP"                  4      4      MRVP$                  e$   \        \        \        VP$                  4      4      MRVP&                  V	P(                  V	P*                  V
P,                  V	P.                  V	P0                  e$   \        \        \        V	P0                  4      4      MRR7      4       EK4  	  V#  ELQ5i)zÊ
Fetch a list of stock balances across all or specific stores.
Purpose: Drives the Inventory Report page. Returns current stock levels
for Raw Materials, enriched with master data (Name, Part No, UOM).
Ng        )Úinventory_idr   r   Úcurrent_qtyÚreserved_qtyÚin_transit_qtyÚlast_updatedÚrm_nameÚ
rm_part_noÚ
store_nameÚuomÚ	min_stock)r   r
   r   r   Újoinr   r   ÚwhereÚexecuteÚallÚappendr   r'   Úfloatr   r   r(   r)   r*   r+   ÚnameÚpart_nor.   Úunit_of_measurementÚminimum_stock)r   r   r    Ú_ÚstmtÚresultÚrowsÚoutÚinvÚrmÚstores   &&&&       r#   Úlist_stock_balancesrC      s•  é € ô 	Œ{œH¤kÓ2ß	‰Œhœ×)Ñ)¬X¯^©^Ñ;Ó	<ß	‰Œkœ;×/Ñ/´;×3GÑ3GÑGÓ	Hð 	÷
 Ø�z‰zœ+×+Ñ+¨uÑ4Ó5ˆßØ�z‰zœ+×.Ñ.°(Ñ:Ó;ˆà—:‘:˜dÓ#×#€FØ�:‰:‹<€Dà
€CÜ‰ˆ�Ø�
‰
Ô'Ø×)Ñ)Ø—)‘)Ø—\‘\Üœd¤7¨C¯O©OÓ<Ó=ØCF×CSÑCSÒC_œœt¤G¨S×-=Ñ-=Ó>Ô?ÐehØGJ×GYÑGYÒGeœ5¤¤g¨s×/AÑ/AÓ!BÔCÐknØ×)Ñ)à—G‘GØ—z‘zØ×'Ñ'Ø×&Ñ&Ø@B×@PÑ@PÒ@\”eœD¤¨"×*:Ñ*:Ó;Ô<Ðbfô
÷ 	ñ ð  €Jò) $ùs   ‚B1H>Â46H>Ã*H;Ã+EH>z/balances/{rm_id}/{store_id}c                ó<   € V ^8„  d   QhR\         R\         R\        /# r   )r   r   )r"   s   "r#   r$   r$   @   s&   € ÷ ñ Üðäðô 	ñr%   c              ƒ  ól   "  € \        V4      pVP                  W4      G Rj  x€L
 p\        V4      #  L5i)zÊ
Get the exact current balance for a specific Raw Material in a specific Store.
Purpose: Used by frontend validation logic before performing consumptions
or transfers to ensure sufficient stock exists.
N)r   Úget_balancer6   )r   r   r    r;   ÚserviceÚbalances   &&&&  r#   Úget_stock_balancerI   ?   s3   é € ô ˜rÓ"€GØ×'Ñ'¨Ó8×8€GÜ�‹>Ðñ 9ùs   ‚ 4¢2£4z/consumeÚcreatec                ó0   € V ^8„  d   QhR\         R\        /# ©r   Úreqr    )r   r   )r"   s   "r#   r$   r$   P   s   € ÷ <ñ <Ü	ð<äñ<r%   c           	   ƒ  óh  "  € \        V4      p VP                  V P                  V P                  \	        \        V P                  4      4      V P                  V P                  V P                  R7      G Rj  x€L
 p\        V4      #  L  \         d   p\        R\        T4      R7      hRp?ii ; i5i)z´
Consume (reduce) stock from a specific store.
Purpose: Logs material usage in production. This updates the live stock
balance and generates a transaction log in the Stock Ledger.
)r   r   ÚqtyÚconsumed_dateÚdescriptionÚremarksNé�  ©Ústatus_codeÚdetail)r   Úconsumer   r   r   ÚstrrO   rP   rQ   rR   r6   Ú
ValueErrorr   )rM   r    r;   rG   Únew_balanceÚes   &&&   r#   Úconsume_stockr\   O   s—   é € ô ˜rÓ"€Gð<Ø#ŸO™OØ—)‘)Ø—\‘\Üœ˜CŸG™G›Ó%Ø×+Ñ+ØŸ™Ø—K‘Kð ,ó 
÷ 
ˆô �[Ó!Ð!ñ
øô ô <Ü¨´C¸³FÔ;Ð;ûð<üs;   ‚B2�A(B	 Á7BÁ8B	 ÂB2ÂB	 Â	B/ÂB*Â*B/Â/B2z	/transferc                ó0   € V ^8„  d   QhR\         R\        /# rL   )r   r   )r"   s   "r#   r$   r$   i   s   € ÷ <ñ <Ü	ð<äñ<r%   c           
   ƒ  ó@  "  € \        V4      p VP                  V P                  V P                  V P                  \        \        V P                  4      4      V P                  R7      G Rj  x€L
  R#  L  \         d   p\        R\        T4      R7      hRp?ii ; i5i)zÙ
Transfer stock from one store to another.
Purpose: Moves physical inventory between locations (e.g., Main Store to Floor Store).
Generates two ledger entries: a deduction from source, and an addition to destination.
)r   Úfrom_store_idÚto_store_idrO   rR   NTrS   rT   )r   Útransferr   r_   r`   r   rX   rO   rR   rY   r   )rM   r    r;   rG   r[   s   &&&  r#   Útransfer_stockrb   h   s�   é € ô ˜rÓ"€Gð
<Ø×ÑØ—)‘)Ø×+Ñ+ØŸ™Üœ˜CŸG™G›Ó%Ø—K‘Kð ó 
÷ 	
ð 	
ñ ñ	
øô ô <Ü¨´C¸³FÔ;Ð;ûð<üs;   ‚B�AA5 Á,A3Á-A5 Á1BÁ3A5 Á5BÂ BÂBÂBz/ledgerc                óh   € V ^8„  d   QhR\         \        ,          R\         \        ,          R\        /# r   r!   )r"   s   "r#   r$   r$   �   s.   € ÷ ,ñ ,Ü”D�>ð,ä”t�nð,ô 	ñ,r%   c              ƒ  óÜ  "  € \        \        \        \        4      P	                  \        \        P
                  \        P
                  8H  4      P	                  \        \        P                  \        P                  8H  4      pV '       d#   VP                  \        P
                  V 8H  4      pV'       d#   VP                  \        P                  V8H  4      pVP                  \        P                  P                  4       4      pVP                  V4      G Rj  x€L
 p. pVP                  4        EF4  w  rxp	VP                  \        R/ RVP                  bRVP
                  bRVP                  bRVP                   bR\#        \%        \&        VP(                  4      4      bR\#        \%        \&        VP*                  4      4      bR\#        \%        \&        VP,                  4      4      bR	VP.                  bR
VP0                  bRVP2                  bRVP                  bRVP4                  bRVP6                  bRV	P8                  bRVP:                  bRVP.                  b 4       EK7  	  V#  ELR5i)zÌ
Fetch the stock transaction ledger (history).
Purpose: Drives the Consumption Report / Stock Ledger page. Provides a full
audit trail of all GRNs, Consumptions, and Transfers that affected stock levels.
NÚlog_idr   r   Útransaction_typerO   Úbalance_beforeÚbalance_afterÚreference_typeÚreference_idrR   Ú
created_atr,   r-   r.   r/   rQ   © )r   r   r   r   r1   r   r   r2   Úorder_byrk   Údescr3   r4   r5   r   re   rf   r6   r   r   rO   rg   rh   ri   rj   rR   r7   r8   r.   r9   )
r   r   r    r;   r<   r=   r?   ÚlogrA   rB   s
   &&&&      r#   Úlist_ledgerrp   €   s  é € ô 	Œ~œx¬Ó5ß	‰Œhœ×,Ñ,´·±Ñ>Ó	?ß	‰Œkœ>×2Ñ2´k×6JÑ6JÑJÓ	Kð 	÷
 Ø�z‰zœ.×.Ñ.°%Ñ7Ó8ˆßØ�z‰zœ.×1Ñ1°XÑ=Ó>ˆØ�=‰=œ×2Ñ2×7Ñ7Ó9Ó:€DØ—:‘:˜dÓ#×#€Fà
€CØ Ÿ*™*Ÿ,‰ˆ�Ø�
‰
Ô*ò 
Ø—:’:ð
à—)’)ð
ð —\’\ð
ð !×1Ò1ð	
ô
 ”dœ7 C§G¡GÓ,Ô-ð
ô !¤¤g¨s×/AÑ/AÓ!BÔCð
ô  ¤¤W¨c×.?Ñ.?Ó @ÔAð
ð ×-Ò-ð
ð ×)Ò)ð
ð —K’Kð
ð —~’~ð
ð —G’Gð
ð —z’zð
ð ×'Ò'ð
ð  ×&Ò&ð!
ð" ×*Ò*ð#
÷ 	ñ 'ð( €Jò/ $ùs   ‚B1I,Â4A#I,ÄI)ÄEI,)*Úfastapir   r   r   Úsqlalchemy.ext.asyncior   Ú
sqlalchemyr   Úapp.core.databaser   Úapp.core.securityr	   Úapp.models.rm_modelsr
   r   r   r   rG   r   Úschemasr   r   r   r   Úuuidr   Útypingr   r   r   Údecimalr   ÚrouterÚgetrC   r6   rI   Úpostr\   Úboolrb   rp   rl   r%   r#   Ú<module>r      sx  ðç 5Ñ 5Ý /Ý Ý $Ý 0ß SÓ SÝ %÷ó õ ß 'Ñ 'Ý á	‹€à‡�ˆK¨Ð-AÕ(B€ÓCà Ø#Ù˜v“ÙÑ  ¨fÓ5Ó6ö	*ó Dð*ðX ‡�Ð*¸5€ÓAñ ˜v“ÙÑ  ¨fÓ5Ó6ö	ó Bðð ‡�ˆZ¨€Ó.ñ ˜v“ÙÑ  ¨hÓ7Ó8ö<ó /ð<ð0 ‡�ˆ[¨€Ó.ñ ˜v“ÙÑ  ¨hÓ7Ó8ö<ó /ð<ð. ‡�ˆI dÐ+BÕ&C€ÓDà Ø#Ù˜v“ÙÑ  ¨fÓ5Ó6ö	,ó Eò,r%   