§
    Â‰¬j  ã            	      ó’  — 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	m
Z
 d dl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	dd¬¦  «         e	dd¬¦  «         e eg d¢¦  «        ¦  «        fd0d„¦   «         Ze                     dd ¬¦  «        dd! e eg d"¢¦  «        ¦  «        fd1d'„¦   «         Ze                     d(d)¬¦  «         e eg d"¢¦  «        ¦  «        fd2d*„¦   «         Ze                     d+d,¬¦  «         e eg d¢¦  «        ¦  «        fd3d/„¦   «         ZdS )4é    )ÚannotationsN)ÚAny)Ú	APIRouterÚBackgroundTasksÚDependsÚFormÚHTTPException)Úrequire_role)ÚErpDatabaseClient)Úget_drawing_takeoff_serviceé   )ÚSyncWbsRequestzdscons.api.takeoff.crudz/{takeoff_id}/analyzeuP   KÃ­ch hoáº¡t BÃ³c tÃ¡ch Khá»‘i lÆ°á»£ng AI Vision cho Báº£n váº½ Ä‘Ã£ táº£i lÃªn)ÚsummaryÚ u:   Ghi chÃº cáº¥u kiá»‡n / loáº¡i mÃ³ng / vá»‹ trÃ­ kÃªnh kÃ¨)ÚdescriptionTu    Cháº¡y ngáº§m báº¥t Ä‘á»“ng bá»™)Ú
superadminÚdirectorÚmanagerÚengineerÚ
takeoff_idÚstrÚbackground_tasksr   Údrawing_hintÚ	run_asyncÚboolÚcurrent_userúdict[str, Any]Úreturnc           	   ƒ  óâ  K  — t          ¦   «         }|                     | ¦  «        }|st          dd¬¦  «        ‚t          |t          ¦  «        r)|                     ¦   «                              ¦   «         dv}nt          |¦  «        }t          ¦   «         }|r<| 	                    | dddœ¦  «         | 
                    |j        | |¬¦  «         dd	| d
œS |                     | |¬¦  «        ƒ d{V —†}	|	                     d¦  «        dk    r|	S |                     | ¦  «        pi }
|                     | ¦  «        pg }t          |
                     d¦  «        pd¦  «        t          |
                     d¦  «        pd¦  «        t          |
                     d¦  «        pd¦  «        t          |
                     d¦  «        pd¦  «        t          |
                     d¦  «        pd¦  «        dœ}d|
||dœS )ui   KÃ­ch hoáº¡t hoáº·c cháº¡y láº¡i bÃ³c tÃ¡ch AI cho há»“ sÆ¡ báº£n váº½ mÃ  khÃ´ng cáº§n táº£i láº¡i file.é”  u&   KhÃ´ng tÃ¬m tháº¥y há»“ sÆ¡ báº£n váº½©Ústatus_codeÚdetail)ÚfalseÚ0ÚnoÚfÚoffÚ
processingu7   Ä�Ã£ xáº¿p hÃ ng yÃªu cáº§u bÃ³c tÃ¡ch AI Quá»³nh QS...)Útakeoff_statusÚai_analysis_notes)r   r   uT   Ä�Ã£ khá»Ÿi Ä‘á»™ng tiáº¿n trÃ¬nh AI Quá»³nh bÃ³c tÃ¡ch khá»‘i lÆ°á»£ng trong ná»�n.)ÚstatusÚmessager   Nr,   ÚerrorÚtotal_estimated_cost_vndr   Útotal_concrete_volume_m3Útotal_rebar_weight_tonsÚtotal_formwork_area_m2Útotal_earthwork_volume_m3)r/   r0   r1   r2   r3   Úsuccess)r,   ÚtakeoffÚitemsÚmetrics)r   Úget_drawing_takeoffr	   Ú
isinstancer   ÚstripÚlowerr   r   Úupdate_drawing_takeoffÚadd_taskÚrun_takeoff_pipelineÚgetÚlist_drawing_takeoff_itemsÚfloat)r   r   r   r   r   Úclientr5   Úis_async_modeÚserviceÚpipeline_resultÚtakeoff_recordr6   r7   s                úBC:\Projects\DSCons\app\modules\takeoff\presentation\crud_routes.pyÚanalyze_existing_drawingrH      sƒ  è è € õ  Ñ Ô €FØ×(Ò(¨Ñ4Ô4€GØð ^Ý¨Ð4\Ð]Ñ]Ô]Ð]õ �)�SÑ!Ô!ð 	(Ø!ŸšÑ)Ô)×/Ò/Ñ1Ô1ð :
ð 
ˆˆõ ˜Y™œˆå)Ñ+Ô+€GØð 
Ø×%Ò%Øà".Ø%^ðð ñ	
ô 	
ð 	
ð 	×!Ò!ØÔ(Ø!Ø%ð 	"ñ 	
ô 	
ð 	
ð #ØmØ$ð
ð 
ð 	
ð $×8Ò8Ø¨Lð 9ñ ô ð ð ð ð ð ð €Oð ×Ò˜8Ñ$Ô$¨Ò/Ð/ØÐà×/Ò/°
Ñ;Ô;ÐA¸r€NØ×-Ò-¨jÑ9Ô9Ð?¸R€Eå$)Ø×ÒÐ9Ñ:Ô:Ð?¸añ%
ô %
õ %*Ø×ÒÐ9Ñ:Ô:Ð?¸añ%
ô %
õ $)Ø×ÒÐ8Ñ9Ô9Ð>¸Qñ$
ô $
õ #(Ø×ÒÐ7Ñ8Ô8Ð=¸Añ#
ô #
õ &+Ø×ÒÐ:Ñ;Ô;Ð@¸qñ&
ô &
ðð €Gð$ Ø!ØØð	ð ð ó    z/listuA   Láº¥y danh sÃ¡ch cÃ¡c há»“ sÆ¡ bÃ³c tÃ¡ch báº£n váº½ ká»¹ thuáº­té2   )r   r   r   r   ÚstaffÚ
project_idú
str | NoneÚlimitÚintc                ó@  — t          ¦   «         }|                     | |¬¦  «        }|D ]d}t          |                     d¦  «        t          ¦  «        r:	 t
                               |d         ¦  «        |d<   ŒO# t          $ r g |d<   Y Œ`w xY wŒedt          |¦  «        |dœS )u/   Danh sÃ¡ch cÃ¡c há»“ sÆ¡ bÃ³c tÃ¡ch báº£n váº½.)rL   rN   Ú
pages_datar4   )r,   ÚtotalÚdata)	r   Úlist_drawing_takeoffsr9   r?   r   ÚjsonÚloadsÚ	ExceptionÚlen)rL   rN   r   rB   ÚtakeoffsÚts         rG   Úlist_takeoffsr[   o   sÁ   € õ Ñ Ô €FØ×+Ò+°zÈÐ+ÑOÔO€HØð %ð %ˆÝ�a—e’e˜LÑ)Ô)­3Ñ/Ô/ð 	%ð%Ý"&§*¢*¨Q¨|¬_Ñ"=Ô"=��,‘�øÝð %ð %ð %Ø"$��,‘��ð%øøøð	%ð Ý�X‘”Øðð ð s   Á#A7Á7B	ÂB	z/{takeoff_id}uK   Xem chi tiáº¿t báº£ng bÃ³c tÃ¡ch khá»‘i lÆ°á»£ng vÃ  cÃ´ng thá»©c Ä‘o tÃ­nhc                óh  — t          ¦   «         }|                     | ¦  «        }|st          dd¬¦  «        ‚t          |                     d¦  «        t
          ¦  «        r:	 t                               |d         ¦  «        |d<   n# t          $ r g |d<   Y nw xY w| 	                    | ¦  «        }d||dœS )uH   Chi tiáº¿t há»“ sÆ¡ bÃ³c tÃ¡ch vÃ  toÃ n bá»™ danh má»¥c cÃ´ng tÃ¡c BoQ.r    u1   KhÃ´ng tÃ¬m tháº¥y há»“ sÆ¡ bÃ³c tÃ¡ch báº£n váº½r!   rQ   r4   )r,   r5   r6   )
r   r8   r	   r9   r?   r   rU   rV   rW   r@   )r   r   rB   r5   r6   s        rG   Úget_takeoff_detailr]   Œ   sâ   € õ Ñ Ô €FØ×(Ò(¨Ñ4Ô4€GØð 
ÝØÐ$Wð
ñ 
ô 
ð 	
õ �'—+’+˜lÑ+Ô+­SÑ1Ô1ð 'ð	'Ý$(§J¢J¨w°|Ô/DÑ$EÔ$EˆG�LÑ!Ð!øÝð 	'ð 	'ð 	'Ø$&ˆG�LÑ!Ð!Ð!ð	'øøøð ×-Ò-¨jÑ9Ô9€EàØØðð ð s   Á #B ÂBÂBz/{takeoff_id}/sync-wbsuF   1-Click Ä�á»“ng Bá»™ Khá»‘i LÆ°á»£ng BÃ³c TÃ¡ch Sang CÃ¢y WBS Dá»± Ã�nÚreqr   c                óZ   — t          ¦   «         }|                     | |j        ¬¦  «        }|S )ub   Ä�áº©y cÃ¡c Ä‘áº§u má»¥c cÃ´ng viá»‡c bÃ³c tÃ¡ch vÃ o cÃ¢y WBS cá»§a Dá»± Ã¡n chá»‰ vá»›i 1 click.)r   rL   )r   Úsync_takeoff_to_project_wbsrL   )r   r^   r   rB   Úress        rG   Úsync_takeoff_to_wbsrb   ®   s7   € õ Ñ Ô €FØ
×
,Ò
,Ø¨#¬.ð -ñ ô €Cð €JrI   )r   r   r   r   r   r   r   r   r   r   r   r   )rL   rM   rN   rO   r   r   r   r   )r   r   r   r   r   r   )r   r   r^   r   r   r   r   r   )Ú
__future__r   ÚloggingÚtypingr   Úfastapir   r   r   r   r	   Ú"app.modules.auth.presentation.authr
   Úapp.core.postgres.erp_clientr   Ú7app.modules.takeoff.application.drawing_takeoff_servicer   Úschemasr   Ú	getLoggerÚloggerÚrouterÚpostrH   r?   r[   r]   rb   © rI   rG   ú<module>rp      sÅ  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð <Ð ;Ð ;Ð ;Ð ;Ð ;Ø :Ð :Ð :Ð :Ð :Ð :Ø _Ð _Ð _Ð _Ð _Ð _à #Ð #Ð #Ð #Ð #Ð #à	ˆÔ	Ð4Ñ	5Ô	5€Ø	ˆ‰Œ€ð ‡‚ØØ^ð ñ ô ð ˜Ø
ÐTðñ ô ð �d˜4Ð-OÐPÑPÔPØ#* 7ØˆÐFÐFÐFÑGÔGñ$ô $ðPð Pð Pð Pñ	ô ðPðf ‡‚ØØOð ñ ô ð
 "ØØ#* 7ØˆØFÐFÐFñ	
ô 	
ñ$ô $ðð ð ð ñ	ô ðð2 ‡‚ØØYð ñ ô ð $+ 7ØˆØFÐFÐFñ	
ô 	
ñ$ô $ðð ð ð ñ	ô ðð< ‡‚ØØTð ñ ô ð $+ 7ØˆÐFÐFÐFÑGÔGñ$ô $ðð ð ð ñ	ô ðð ð rI   