§
    šú•jþ  ã                   óÒ   — d dl mZ d dlmZ d dlZd dlmZmZ d dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZ  ej        e¦  «        Z G d	„ d
e¦  «        Z G d„ deedf         ¦  «        ZdS )é    )ÚUUID)ÚDecimalN)ÚICommandÚICommandHandler)ÚtransactionalÚlog_execution)ÚBasePostgresClient)ÚInventoryItem)ÚInventoryRepositoryc                   ó.   — e Zd ZU eed<   eed<   eed<   dS )ÚReserveStockCommandÚmaterial_codeÚwarehouse_idÚquantityN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r   © ó    ú@C:\Projects\DSCons\app\modules\inventory\application\commands.pyr   r      s6   € € € € € € ØÐÐÑØÐÐÑØÐÐÑÐÐr   r   c                   óJ   — e Zd Zdefd„Zeededdfd„¦   «         ¦   «         ZdS )ÚReserveStockCommandHandlerÚpostgres_clientc                 ó   — || _         d S )N)Ú_postgres_client)Úselfr   s     r   Ú__init__z#ReserveStockCommandHandler.__init__   s   € Ø /ˆÔÐÐr   ÚcommandÚreturnNc           	      ó¨  — t          | j        ¦  «        }ddlm} 	 | j                             ¦   «         5 }|                     d|j        |j        f¦  «         |                     ¦   «         }|st          d|j        › d|j        › �¦  «        ‚t          |d         |d         |d         |d	         |d
         ¬¦  «        }|                     |j        ¦  «         |                     |¦  «         d d d ¦  «         n# 1 swxY w Y   t                               d|j        › d|j        › �¦  «         d S # t           $ r–}t                               d|› �¦  «         |j        t%          |j        ¦  «        t'          |¦  «        dœ}| j                             ¦   «         5 }|                     |d|¦  «         d d d ¦  «         n# 1 swxY w Y   |‚d }~ww xY w)Nr   )Ú	event_busa  
                    SELECT id, material_code, warehouse_id, quantity_on_hand, reserved_quantity, version
                    FROM inventory.items
                    WHERE material_code = %s AND warehouse_id = %s
                    FOR UPDATE
                u   KhÃ´ng tÃ¬m tháº¥y váº­t tÆ° z trong kho Úidr   r   Úquantity_on_handÚreserved_quantity)r$   r   r   r%   r&   u   [Inventory] Ä�Ã£ giá»¯ chá»— u	    cho mÃ£ uP   [Inventory] Tháº¥t báº¡i khi giá»¯ chá»— (Race Condition / KhÃ´ng Ä‘á»§ hÃ ng): )r   Úrequested_quantityÚerror_reasonÚStockNotEnoughEvent)r   Ú_connÚ#app.core.module_framework.event_busr#   ÚcursorÚexecuter   r   ÚfetchoneÚ
ValueErrorr
   Úreserve_stockr   ÚsaveÚloggerÚinfoÚ	ExceptionÚwarningÚfloatr   Úpublish_outbox)	r   r    Úrepor#   ÚcurÚrowÚitemÚeÚevent_payloads	            r   Úhandlez!ReserveStockCommandHandler.handle   s“  € õ # 4¤:Ñ.Ô.ˆØAÐAÐAÐAÐAÐAð)	à”×"Ò"Ñ$Ô$ð  ¨Ø—’ð ð
 Ô+¨WÔ-AÐBñDô Dð Dð —l’l‘n”n�Øð Ý$Ð%}ÀWÔEZÐ%}Ð%}ÐgnÔg{Ð%}Ð%}Ñ~Ô~Ð~å$Ø˜4”yØ"% oÔ"6Ø!$ ^Ô!4Ø%(Ð);Ô%<Ø&)Ð*=Ô&>ðñ ô �ð ×"Ò" 7Ô#3Ñ4Ô4Ð4ð —	’	˜$‘”�ð1 ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  õ4 �KŠKÐj¸Ô8HÐjÐjÐSZÔShÐjÐjÑkÔkÐkÐkÐkøåð 	ð 	ð 	Ý�NŠNÐqÐnoÐqÐqÑrÔrÐrð ")Ô!6Ý&+¨GÔ,<Ñ&=Ô&=Ý # A¡¤ðð ˆMð
 ”×"Ò"Ñ$Ô$ð T¨Ø×(Ò(¨Ð.CÀ]ÑSÔSÐSðTð Tð Tñ Tô Tð Tð Tð Tð Tð Tð Tøøøð Tð Tð Tð Tð ˆGøøøøð	øøøs`   œD1 µB9C:Ã.D1 Ã:C>Ã>D1 ÄC>Ä-D1 Ä1
GÄ;A GÆF?Æ3GÆ?G	ÇGÇG	ÇGÇG)	r   r   r   r	   r   r   r   r   r>   r   r   r   r   r      si   € € € € € ð0Ð(:ð 0ð 0ð 0ð 0ð Øð-Ð1ð -°dð -ð -ð -ñ „]ñ „]ð-ð -ð -r   r   )Úuuidr   Údecimalr   ÚloggingÚapp.core.module_framework.cqrsr   r   Ú$app.core.module_framework.decoratorsr   r   Ú&app.core.postgres.base_pkg.base_clientr	   Ú%app.modules.inventory.domain.entitiesr
   Ú1app.modules.inventory.infrastructure.repositoriesr   Ú	getLoggerr   r2   r   r   r   r   r   ú<module>rH      s  ðØ Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø €€€à DÐ DÐ DÐ DÐ DÐ DÐ DÐ DØ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ EÐ EÐ EÐ EÐ EÐ EØ ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø QÐ QÐ QÐ QÐ QÐ Qà	ˆÔ	˜8Ñ	$Ô	$€ðð ð ð ð ˜(ñ ô ð ð
3ð 3ð 3ð 3ð 3 Ð1DÀdÐ1JÔ!Kñ 3ô 3ð 3ð 3ð 3r   