§
     ’j–  ã                  óf  — d dl mZ d dlZd dlmZ d dlmZmZmZm	Z	 d dl
mZ d dlmZ ddlmZ  ej        d	¦  «        Z e¦   «         Ze                     d
d¬¦  «         e eg d¢¦  «        ¦  «        fd&d„¦   «         Ze                     dd¬¦  «         e	dd¬¦  «         e eddg¦  «        ¦  «        fd'd„¦   «         Ze                     dd ¬¦  «         e eg d¢¦  «        ¦  «        fd(d"„¦   «         Ze                     d#d$¬¦  «         e eg d¢¦  «        ¦  «        fd(d%„¦   «         ZdS ))é    )ÚannotationsN)ÚAny)Ú	APIRouterÚDependsÚHTTPExceptionÚQuery)Úrequire_role)ÚErpDatabaseClienté   )ÚTakeoffItemUpdateRequestzdscons.api.takeoff.managez/items/{item_id}uJ   Chá»‰nh sá»­a chi tiáº¿t má»™t dÃ²ng cÃ´ng tÃ¡c bÃ³c tÃ¡ch khá»‘i lÆ°á»£ng)Úsummary)Ú
superadminÚdirectorÚmanagerÚengineerÚitem_idÚstrÚreqr   Úcurrent_userúdict[str, Any]Úreturnc                óJ  — t          ¦   «         }|                     d¬¦  «        }|st          dd¬¦  «        ‚d|v sd|v r6|                     d¦  «        }|                     d¦  «        }|�
|�||z  |d	<   |                     | |¦  «        }|st          d
d¬¦  «        ‚dd|dœS )uX   Cáº­p nháº­t sá»‘ lÆ°á»£ng, Ä‘Æ¡n giÃ¡, cÃ´ng thá»©c Ä‘o tÃ­nh cá»§a má»™t Ä‘áº§u má»¥c.T)Úexclude_nonei�  u"   KhÃ´ng cÃ³ dá»¯ liá»‡u thay Ä‘á»•i©Ústatus_codeÚdetailÚquantityÚunit_price_vndNÚtotal_amount_vndé”  u6   KhÃ´ng tÃ¬m tháº¥y dÃ²ng bÃ³c tÃ¡ch Ä‘á»ƒ cáº­p nháº­tÚsuccessu/   Ä�Ã£ cáº­p nháº­t thÃ nh cÃ´ng dÃ²ng bÃ³c tÃ¡ch)ÚstatusÚmessageÚdata)r
   Ú
model_dumpr   ÚgetÚupdate_drawing_takeoff_item)r   r   r   ÚclientÚpayloadÚqtyÚpriceÚupdateds           úDC:\Projects\DSCons\app\modules\takeoff\presentation\manage_routes.pyÚupdate_takeoff_itemr.      sç   € õ Ñ Ô €FØ�nŠn¨$ˆnÑ/Ô/€GØð ZÝ¨Ð4XÐYÑYÔYÐYð �WÐÐÐ 0°GÐ ;Ð ;Ø�kŠk˜*Ñ%Ô%ˆØ—’Ð,Ñ-Ô-ˆØˆ?˜uÐ0Ø*-°©+ˆGÐ&Ñ'à×0Ò0°¸'ÑBÔB€GØð 
ÝØÐ$\ð
ñ 
ô 
ð 	
ð
 ØDØðð ð ó    z
/clear-allud   XÃ³a toÃ n bá»™ há»“ sÆ¡ bÃ³c tÃ¡ch báº£n váº½ cÅ© (DÃ nh riÃªng cho Super Admin / Ban GiÃ¡m Ä�á»‘c)uX   MÃ£ UUID dá»± Ã¡n cáº§n xÃ³a toÃ n bá»™ báº£n váº½ (Ä‘á»ƒ trá»‘ng náº¿u xÃ³a táº¥t cáº£))Údescriptionr   r   Ú
project_idú
str | Nonec                ó^   — t          ¦   «         }|                     | ¬¦  «        }dd|› d�|dœS )u5   XÃ³a hÃ ng loáº¡t há»“ sÆ¡ bÃ³c tÃ¡ch báº£n váº½ cÅ©.)r1   r!   u   Ä�Ã£ xÃ³a thÃ nh cÃ´ng u    há»“ sÆ¡ bÃ³c tÃ¡ch báº£n váº½)r"   r#   Údeleted_count)r
   Údelete_all_drawing_takeoffs)r1   r   r(   r4   s       r-   Úclear_all_takeoffsr6   ;   sH   € õ Ñ Ô €FØ×6Ò6À*Ð6ÑMÔM€MàØ[¨]Ð[Ð[Ð[Ø&ðð ð r/   z/{takeoff_id}u#   XÃ³a há»“ sÆ¡ bÃ³c tÃ¡ch báº£n váº½Ú
takeoff_idc                óx   — t          ¦   «         }|                     | ¦  «        }|st          dd¬¦  «        ‚dddœS )u$   XÃ³a há»“ sÆ¡ bÃ³c tÃ¡ch báº£n váº½.r    u&   KhÃ´ng tÃ¬m tháº¥y há»“ sÆ¡ Ä‘á»ƒ xÃ³ar   r!   u(   Ä�Ã£ xÃ³a há»“ sÆ¡ bÃ³c tÃ¡ch báº£n váº½)r"   r#   )r
   Údelete_drawing_takeoffr   )r7   r   r(   Úoks       r-   Údelete_takeoffr;   P   sN   € õ Ñ Ô €FØ	×	&Ò	& zÑ	2Ô	2€BØð ^Ý¨Ð4\Ð]Ñ]Ô]Ð]ØÐ,VÐWÐWÐWr/   z/{takeoff_id}/canceluU   Dá»«ng kháº©n cáº¥p tiáº¿n trÃ¬nh bÃ³c tÃ¡ch báº£n váº½ Ä‘ang cháº¡y hoáº·c bá»‹ treoc                ó  — t          ¦   «         }|                     | ¦  «        }|st          dd¬¦  «        ‚|                     d¦  «        p|                     d¦  «        pd}|                     | dd|› d	�d
œ¦  «        }dd|dœS )uk   Dá»«ng kháº©n cáº¥p tiáº¿n trÃ¬nh bÃ³c tÃ¡ch báº£n váº½ Ä‘ang cháº¡y vÃ  Ä‘Æ°a tráº¡ng thÃ¡i vá»� 'failed'.r    u&   KhÃ´ng tÃ¬m tháº¥y há»“ sÆ¡ báº£n váº½r   Ú	full_nameÚemailu   Quáº£n trá»‹ viÃªnÚfailedu@   Tiáº¿n trÃ¬nh bÃ³c tÃ¡ch Ä‘Ã£ bá»‹ dá»«ng theo yÃªu cáº§u cá»§a uH   . Sáº¿p cÃ³ thá»ƒ báº¥m 'BÃ³c TÃ¡ch Láº¡i AI Vision' Ä‘á»ƒ cháº¡y láº¡i.)Útakeoff_statusÚai_report_messager!   u1   Ä�Ã£ dá»«ng tiáº¿n trÃ¬nh bÃ³c tÃ¡ch thÃ nh cÃ´ng)r"   r#   Útakeoff)r
   Úget_drawing_takeoffr   r&   Úupdate_drawing_takeoff)r7   r   r(   rB   Ú	user_namer,   s         r-   Úcancel_takeoffrF   b   sÌ   € õ Ñ Ô €FØ×(Ò(¨Ñ4Ô4€GØð ^Ý¨Ð4\Ð]Ñ]Ô]Ð]ð 	×Ò˜Ñ%Ô%ÐZ¨×)9Ò)9¸'Ñ)BÔ)BÐZÐFZð ð ×+Ò+Øà&ð "xÐdmð  "xð  "xð  "xð	
ð 	
ñô €Gð ØFØðð ð r/   )r   r   r   r   r   r   r   r   )r1   r2   r   r   r   r   )r7   r   r   r   r   r   )Ú
__future__r   ÚloggingÚtypingr   Úfastapir   r   r   r   Ú"app.modules.auth.presentation.authr	   Úapp.core.postgres.erp_clientr
   Úschemasr   Ú	getLoggerÚloggerÚrouterÚputr.   Údeleter6   r;   ÚpostrF   © r/   r-   ú<module>rU      s�  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð <Ð ;Ð ;Ð ;Ð ;Ð ;Ø :Ð :Ð :Ð :Ð :Ð :à -Ð -Ð -Ð -Ð -Ð -à	ˆÔ	Ð6Ñ	7Ô	7€Ø	ˆ‰Œ€ð ‡‚ØØXð ñ ô ð $+ 7ØˆÐFÐFÐFÑGÔGñ$ô $ðð ð ð ñ	ô ððB ‡‚ØØrð ñ ô ð
 #˜UØØnðñ ô ð $+ 7¨<¨<¸ÀzÐ8RÑ+SÔ+SÑ#TÔ#Tðð ð ð ñ	ô ðð" ‡‚ØØ1ð ñ ô ð $+ 7ØˆÐFÐFÐFÑGÔGñ$ô $ðXð Xð Xð Xñ	ô ðXð ‡‚ØØcð ñ ô ð $+ 7ØˆÐFÐFÐFÑGÔGñ$ô $ðð ð ð ñ	ô ðð ð r/   