§
    ^ ’j·L  ã                  ó€   — d dl mZ d dlZd dlZd dlZd dlmZmZ d dlm	Z	  ej
        e¦  «        Z G d„ d¦  «        ZdS )é    )ÚannotationsN)ÚdateÚ	timedelta)ÚAnyc                  ód   — e Zd Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zd d„Z	d d„Z
d d„Z	 	 d!d"d„ZdS )#ÚErpTakeoffItemMixinÚpayloadúdict[str, Any]Úreturnc                ó¶  — |                      d¦  «        pt          t          j        ¦   «         ¦  «        |                      d¦  «        |                      dd¦  «        |                      dd¦  «        |                      dd¦  «        |                      d	d
¦  «        |                      dd¦  «        |                      dd¦  «        |                      dd¦  «        |                      dd¦  «        |                      dd¦  «        |                      dd¦  «        |                      dd¦  «        dœ}|                      ¦   «         5 }|                     ¦   «         5 }d}|                     ||¦  «         |                     ¦   «          |                     ¦   «         cd d d ¦  «         cd d d ¦  «         S # 1 swxY w Y   	 d d d ¦  «         d S # 1 swxY w Y   d S )NÚidÚ
takeoff_idÚ
item_orderé   Úwbs_codeú1.1.1Ú	norm_codeúAB.11110Ú	item_nameõ   CÃ´ng tÃ¡c xÃ¢y láº¯pÚcategoryÚconcreteÚdimension_formulaÚ ÚunitÚm3Úquantityç        Úunit_price_vndÚtotal_amount_vndÚprice_source_url©r   r   r   r   r   r   r   r   r   r   r   r    r!   a‹  
                    INSERT INTO erp_drawing_takeoff_items (
                        id, takeoff_id, item_order, wbs_code, norm_code, item_name,
                        category, dimension_formula, unit, quantity, unit_price_vnd,
                        total_amount_vnd, price_source_url
                    ) VALUES (
                        %(id)s, %(takeoff_id)s, %(item_order)s, %(wbs_code)s, %(norm_code)s, %(item_name)s,
                        %(category)s, %(dimension_formula)s, %(unit)s, %(quantity)s, %(unit_price_vnd)s,
                        %(total_amount_vnd)s, %(price_source_url)s
                    ) RETURNING *;
                )	ÚgetÚstrÚuuidÚuuid4Úget_connectionÚcursorÚexecuteÚcommitÚfetchone)Úselfr	   ÚdefaultsÚconnÚcurÚsqls         úCC:\Projects\DSCons\app\core\postgres\clients\takeoff_item_client.pyÚcreate_drawing_takeoff_itemz/ErpTakeoffItemMixin.create_drawing_takeoff_item   s6  € à—+’+˜dÑ#Ô#Ð8¥s­4¬:©<¬<Ñ'8Ô'8Ø!Ÿ+š+ lÑ3Ô3Ø!Ÿ+š+ l°AÑ6Ô6ØŸš J°Ñ8Ô8Ø Ÿš [°*Ñ=Ô=Ø Ÿš [Ð2IÑJÔJØŸš J°
Ñ;Ô;Ø!(§¢Ð-@À"Ñ!EÔ!EØ—K’K ¨Ñ-Ô-ØŸš J°Ñ4Ô4Ø%ŸkškÐ*:¸CÑ@Ô@Ø '§¢Ð,>ÀÑ DÔ DØ '§¢Ð,>ÀÑ CÔ Cð
ð 
ˆð × Ò Ñ"Ô"ð 	& dØ—’‘”ð & #ð
�ð —’˜C Ñ*Ô*Ð*Ø—’‘”�Ø—|’|‘~”~ð&ð &ð &ð &ñ &ô &ð &ð	&ð 	&ð 	&ð 	&ñ 	&ô 	&ð 	&ð 	&ð&ð &ð &ð &øøøð &ð &ð &ð &ð &ð	&ð 	&ð 	&ñ 	&ô 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&øøøð 	&ð 	&ð 	&ð 	&ð 	&ð 	&s7   ÅGÅA F5ÆGÆ5F9	Æ9GÆ<F9	Æ=GÇGÇGÚitemsúlist[dict[str, Any]]Úintc                óê  — |sdS g }|D �]H}|                      |                     d¦  «        pt          t          j        ¦   «         ¦  «        |                     d¦  «        |                     dd¦  «        |                     dd¦  «        |                     dd	¦  «        |                     d
d¦  «        |                     dd¦  «        |                     dd¦  «        |                     dd¦  «        |                     dd¦  «        |                     dd¦  «        |                     dd¦  «        |                     dd¦  «        dœ¦  «         �ŒJd}|                      ¦   «         5 }|                     ¦   «         5 }|                     ||¦  «         |                     ¦   «          t          |¦  «        cddd¦  «         cddd¦  «         S # 1 swxY w Y   ddd¦  «         dS # 1 swxY w Y   dS )zEHigh-speed batch insert of takeoff items in a single SQL transaction.r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   a/  
            INSERT INTO erp_drawing_takeoff_items (
                id, takeoff_id, item_order, wbs_code, norm_code, item_name,
                category, dimension_formula, unit, quantity, unit_price_vnd,
                total_amount_vnd, price_source_url
            ) VALUES (
                %(id)s, %(takeoff_id)s, %(item_order)s, %(wbs_code)s, %(norm_code)s, %(item_name)s,
                %(category)s, %(dimension_formula)s, %(unit)s, %(quantity)s, %(unit_price_vnd)s,
                %(total_amount_vnd)s, %(price_source_url)s
            );
        N)
Úappendr#   r$   r%   r&   r'   r(   Úexecutemanyr*   Úlen)r,   r3   Úpreparedr	   r0   r.   r/   s          r1   Ú"create_drawing_takeoff_items_batchz6ErpTakeoffItemMixin.create_drawing_takeoff_items_batch.   sf  € àð 	Ø�1ØˆØð 	ñ 	ˆGØ�OŠOà!Ÿ+š+ dÑ+Ô+Ð@­sµ4´:±<´<Ñ/@Ô/@Ø")§+¢+¨lÑ";Ô";Ø")§+¢+¨l¸AÑ">Ô">Ø '§¢¨J¸Ñ @Ô @Ø!(§¢¨[¸*Ñ!EÔ!EØ!(§¢¨[Ð:QÑ!RÔ!RØ '§¢¨J¸
Ñ CÔ CØ)0¯ªÐ5HÈ"Ñ)MÔ)MØ#ŸKšK¨°Ñ5Ô5Ø '§¢¨J¸Ñ <Ô <Ø&-§k¢kÐ2BÀCÑ&HÔ&HØ(/¯ªÐ4FÈÑ(LÔ(LØ(/¯ªÐ4FÈÑ(KÔ(Kðð ñô ð ñ ð"
ˆð × Ò Ñ"Ô"ð 	! d¨D¯KªK©M¬Mð 	!¸SØ�OŠO˜C Ñ*Ô*Ð*Ø�KŠK‰MŒMˆMÝ�x‘=”=ð	!ð 	!ð 	!ð 	!ñ 	!ô 	!ð 	!ð 	!ð 	!ð 	!ð 	!ñ 	!ô 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!øøøð 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!ñ 	!ô 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!øøøð 	!ð 	!ð 	!ð 	!ð 	!ð 	!s6   Å)G(Å>9GÆ7G(ÇG	ÇG(ÇG	ÇG(Ç(G,Ç/G,r   r$   c                ó*  — d}|                       ¦   «         5 }|                     ¦   «         5 }|                     ||f¦  «         |                     ¦   «         cddd¦  «         cddd¦  «         S # 1 swxY w Y   ddd¦  «         dS # 1 swxY w Y   dS )ub   Láº¥y danh sÃ¡ch chi tiáº¿t cÃ¡c Ä‘áº§u má»¥c cÃ´ng viá»‡c Ä‘Ã£ bÃ³c tÃ¡ch cá»§a má»™t báº£n váº½.z 
            SELECT *
            FROM erp_drawing_takeoff_items
            WHERE takeoff_id = %s
            ORDER BY item_order ASC, created_at ASC;
        N)r'   r(   r)   Úfetchall)r,   r   r0   r.   r/   s        r1   Úlist_drawing_takeoff_itemsz.ErpTakeoffItemMixin.list_drawing_takeoff_itemsU   s&  € ðˆð × Ò Ñ"Ô"ð 	" d¨D¯KªK©M¬Mð 	"¸SØ�KŠK˜˜j˜]Ñ+Ô+Ð+Ø—<’<‘>”>ð	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð 	"ð 	"s4   —B¬+A0ÁBÁ0A4	Á4BÁ7A4	Á8BÂBÂBÚitem_idúdict[str, Any] | Nonec                óJ  — |sdS g }g }|                      ¦   «         D ]2\  }}|                     |› d�¦  «         |                     |¦  «         Œ3|                     |¦  «         dd                     |¦  «        › d�}|                      ¦   «         5 }|                     ¦   «         5 }	|	                     ||¦  «         |	                     ¦   «         }
|                     ¦   «          |
cddd¦  «         cddd¦  «         S # 1 swxY w Y   ddd¦  «         dS # 1 swxY w Y   dS )uZ   Cáº­p nháº­t khá»‘i lÆ°á»£ng, Ä‘Æ¡n giÃ¡ hoáº·c cÃ´ng thá»©c cá»§a má»™t dÃ²ng bÃ³c tÃ¡ch.Nz = %sz%UPDATE erp_drawing_takeoff_items SET z, z WHERE id = %s RETURNING *;)r3   r7   Újoinr'   r(   r)   r+   r*   )r,   r?   r	   Úset_clausesÚparamsÚkÚvr0   r.   r/   Úrows              r1   Úupdate_drawing_takeoff_itemz/ErpTakeoffItemMixin.update_drawing_takeoff_itema   s¾  € ð ð 	Ø�4ØˆØˆØ—M’M‘O”Oð 	ð 	‰DˆAˆqØ×Ò !˜{˜{˜{Ñ+Ô+Ð+Ø�MŠM˜!ÑÔÐÐØ�Š�gÑÔÐØi°d·i²iÀÑ6LÔ6LÐiÐiÐiˆà× Ò Ñ"Ô"ð 	 d¨D¯KªK©M¬Mð 	¸SØ�KŠK˜˜VÑ$Ô$Ð$Ø—,’,‘.”.ˆCØ�KŠK‰MŒMˆMØð		ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s7   ÂDÂ'A D Ã'DÄ D	ÄDÄD	ÄDÄDÄDc                óp  — d}|                       ¦   «         5 }|                     ¦   «         5 }|                     ||f¦  «         |                     ¦   «         }|                     ¦   «          t          |¦  «        cddd¦  «         cddd¦  «         S # 1 swxY w Y   ddd¦  «         dS # 1 swxY w Y   dS )ul   XÃ³a toÃ n bá»™ cÃ¡c dÃ²ng chi tiáº¿t bÃ³c tÃ¡ch cá»§a má»™t báº£n váº½ Ä‘á»ƒ chuáº©n bá»‹ bÃ³c tÃ¡ch láº¡i.zIDELETE FROM erp_drawing_takeoff_items WHERE takeoff_id = %s RETURNING id;N)r'   r(   r)   r=   r*   r9   )r,   r   r0   r.   r/   Úrowss         r1   Údelete_drawing_takeoff_itemsz0ErpTakeoffItemMixin.delete_drawing_takeoff_itemsu   sB  € ð Xð 	ð × Ò Ñ"Ô"ð 	 d¨D¯KªK©M¬Mð 	¸SØ�KŠK˜˜j˜]Ñ+Ô+Ð+Ø—<’<‘>”>ˆDØ�KŠK‰MŒMˆMÝ�t‘9”9ð		ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s5   —B+¬ABÁ:B+ÂB	ÂB+ÂB	ÂB+Â+B/Â2B/Ú
project_idc                ó\  — |                       |¦  «        }|sdddœS d}t          j        ¦   «         }|                      ¦   «         5 }|                     ¦   «         5 }t          |¦  «        D �][\  }}	|	                     d¦  «        pd|dz   › �}
|	                     d¦  «        }|	                     d¦  «        pd	}t          |	                     d
¦  «        pd¦  «        }t          |	                     d¦  «        pd¦  «        }t          |	                     d¦  «        p||z  ¦  «        }d}|                     |||
|||||| 	                    ¦   «         |t          d¬¦  «        z    	                    ¦   «         |dz   f
¦  «         |                     ¦   «         }|r|d         nd}|                     d||	d         f¦  «         |dz  }�Œ]|                     d||f¦  «         |                     ¦   «          ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   |||dd|› d�dœS )uO   1-Click Ä‘á»“ng bá»™ cÃ¡c háº¡ng má»¥c bÃ³c tÃ¡ch sang cÃ¢y WBS cá»§a dá»± Ã¡n.r   u:   KhÃ´ng cÃ³ háº¡ng má»¥c bÃ³c tÃ¡ch nÃ o Ä‘á»ƒ Ä‘á»“ng bá»™)Úsynced_countÚmessager   z2.r   r   r   r   r   r   r    u½  
                        INSERT INTO erp_project_wbs (
                            project_id, wbs_code, task_name, task_type,
                            unit, quantity, unit_price_vnd, total_amount_vnd,
                            start_date, end_date, duration_days, progress_percent,
                            status, assigned_role, sort_order
                        )
                        VALUES (
                            %s, %s, %s, 'task',
                            %s, %s, %s, %s,
                            %s, %s, 15, 0,
                            'todo', 'Ká»¹ sÆ° QS & Hiá»‡n trÆ°á»�ng', %s
                        )
                        RETURNING id;
                    é   )Údaysr   Nz½
                        UPDATE erp_drawing_takeoff_items
                        SET is_synced_to_wbs = TRUE, synced_wbs_id = %s
                        WHERE id = %s;
                    zÂ
                    UPDATE erp_drawing_takeoffs
                    SET takeoff_status = 'synced_to_wbs', project_id = %s, updated_at = NOW()
                    WHERE id = %s;
                Úsuccessu   Ä�Ã£ Ä‘á»“ng bá»™ thÃ nh cÃ´ng u0    Ä‘áº§u má»¥c bÃ³c tÃ¡ch sang cÃ¢y WBS Dá»± Ã¡n.)rN   rL   r   ÚstatusrO   )r>   r   Útodayr'   r(   Ú	enumerater#   Úfloatr)   Ú	isoformatr   r+   r*   )r,   r   rL   r3   rN   Ú	base_dater.   r/   ÚidxÚitmr   Ú	task_namer   ÚqtyÚpriceÚ	total_valÚwbs_sqlÚwbs_rowÚwbs_ids                      r1   Úsync_takeoff_to_project_wbsz/ErpTakeoffItemMixin.sync_takeoff_to_project_wbs€   s  € ð ×/Ò/°
Ñ;Ô;ˆØð 	à !ØWðð ð ð
 ˆÝ”J‘L”Lˆ	à× Ò Ñ"Ô"ð @	 dØ—’‘”ð ? #Ý )¨%Ñ 0Ô 0ð 3&ñ 3&‘H�C˜Ø"Ÿwšw zÑ2Ô2ÐD°n¸3À¹7°n°n�HØ #§¢¨Ñ 4Ô 4�IØŸ7š7 6™?œ?Ð2¨d�DÝ §¢¨
Ñ 3Ô 3Ð 8°qÑ9Ô9�CÝ! #§'¢'Ð*:Ñ";Ô";Ð"@¸qÑAÔA�EÝ % c§g¢gÐ.@Ñ&AÔ&AÐ&RÀcÈEÁkÑ SÔ S�Ið�Gð —K’KØà&Ø$Ø%Ø ØØ!Ø%Ø%×/Ò/Ñ1Ô1Ø&­¸Ð);Ñ);Ô);Ñ;×FÒFÑHÔHØ !™Gðñô ð ð "Ÿlšl™nœn�GØ.5Ð?˜W Tœ]˜]¸4�Fð —K’Kðð
    T¤Ð+ñô ð ð ! AÑ%�L‘Lð —’ðð
   Ð,ñô ð ð —’‘”�ð?ð ?ð ?ñ ?ô ?ð ?ð ?ð ?ð ?ð ?ð ?øøøð ?ð ?ð ?ð ?ð@	ð @	ð @	ñ @	ô @	ð @	ð @	ð @	ð @	ð @	ð @	øøøð @	ð @	ð @	ð @	ðF )Ø$Ø$ØØw¸ÐwÐwÐwð
ð 
ð 	
s7   ÁHÁFH Ç4HÈ H	ÈHÈH	ÈHÈHÈHc                óT  — ddl m} |                      |¦  «        }|sd|g i dœS d}d}d}d}g }|                      ¦   «         5 }	|	                     ¦   «         5 }
|D �]b}t          |¦  «        }t          |                     d¦  «        pd¦  «        }t          |                     d¦  «        pd¦  «        }t          |                     d¦  «        pd¦  «        }t          |                     d	¦  «        pd¦  «        }t          |                     d
¦  «        pd¦  «        }|                     d¦  «        }|dk    r|dk    r|dk    s|s½|                     |                     dd¦  «        |                     dd¦  «        |                     dd¦  «        ||                     dd¦  «        ¬¦  «        }|d         }|d	         }|d
         }|d         }|
 	                    d|||t          j        |¦  «        |d         f¦  «         ||d<   ||d	<   ||d
<   ||d<   t          ||z  d¦  «        |d<   t          ||z  d¦  «        |d<   t          ||z  d¦  «        |d<   ||d         z  }||d         z  }||d         z  }|t          |                     d¦  «        p||z  ¦  «        z  }|                     |¦  «         �Œd|	                     ¦   «          ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   d||t          |¦  «        t          |d¦  «        t          |d¦  «        t          |d¦  «        t          |d¦  «        t          |dk    r||z  dz  ndd¦  «        t          |dk    r||z  dz  ndd¦  «        t          |dk    r||z  dz  ndd¦  «        dœdœS )un   Láº¥y danh sÃ¡ch cÃ¡c háº¡ng má»¥c kÃ¨m phÃ¢n rÃ£ Ä‘Æ¡n giÃ¡ chi tiáº¿t (VL + NC + M) theo Ä�á»‹nh má»©c 2026.r   ©ÚBoqRateBreakdownEnginerR   )rS   r   r3   Útotalsr   r   r   Úmaterial_cost_vndÚlabor_cost_vndÚequipment_cost_vndÚmaterial_breakdownr   r   r   r   r   r   zAF.11110)r   r   r   Útotal_unit_pricer   af  
                            UPDATE erp_drawing_takeoff_items
                            SET material_cost_vnd = %s,
                                labor_cost_vnd = %s,
                                equipment_cost_vnd = %s,
                                material_breakdown = %s::jsonb
                            WHERE id = %s;
                        r   Útotal_material_vndÚtotal_labor_vndÚtotal_equipment_vndr    Ng      Y@r   )Útotal_material_cost_vndÚtotal_labor_cost_vndÚtotal_equipment_cost_vndÚtotal_boq_amount_vndÚmaterial_percentageÚlabor_percentageÚequipment_percentage)rS   r   r3   Úcountrf   )Ú:app.modules.takeoff.application.boq_rate_breakdown_servicere   r>   r'   r(   ÚdictrV   r#   Úbreakdown_item_rater)   ÚjsonÚdumpsÚroundr7   r*   r9   )r,   r   re   r3   Útotal_vlÚtotal_ncÚtotal_mÚ	total_boqÚenriched_itemsr.   r/   rZ   Úc_itmr\   Ú
unit_priceÚvlÚncÚmÚ	breakdownÚbd_ress                       r1   Úget_takeoff_rate_breakdownz.ErpTakeoffItemMixin.get_takeoff_rate_breakdownØ   s¾  € ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð ×/Ò/°
Ñ;Ô;ˆØð 	à#Ø(ØØð	ð ð ð ˆØˆØˆØˆ	àˆØ× Ò Ñ"Ô"ð 3	 d¨D¯KªK©M¬Mð 3	¸SØð 0-ñ 0-�Ý˜S™	œ	�Ý˜EŸIšI jÑ1Ô1Ð8°SÑ9Ô9�Ý" 5§9¢9Ð-=Ñ#>Ô#>Ð#EÀ#ÑFÔF�
å˜5Ÿ9š9Ð%8Ñ9Ô9Ð@¸SÑAÔA�Ý˜5Ÿ9š9Ð%5Ñ6Ô6Ð=¸#Ñ>Ô>�Ý˜%Ÿ)š)Ð$8Ñ9Ô9Ð@¸SÑAÔA�Ø!ŸIšIÐ&:Ñ;Ô;�	à˜#’I�I "¨¢) )°°S²°À°Ø3×GÒGØ"'§)¢)¨K¸Ñ"<Ô"<Ø!&§¢¨:°rÑ!:Ô!:Ø"ŸYšY v¨tÑ4Ô4Ø)3Ø"'§)¢)¨K¸Ñ"DÔ"Dð Hñ ô �Fð  Ð 3Ô4�BØÐ 0Ô1�BØÐ3Ô4�AØ &Ð';Ô <�Ið —K’Kðð ˜R ¥D¤J¨yÑ$9Ô$9¸5À¼;ÐGñ
ô 
ð 
ð .0�Ð)Ñ*Ø*,�Ð&Ñ'Ø./�Ð*Ñ+Ø.7�Ð*Ñ+Ý.3°B¸±H¸aÑ.@Ô.@�Ð*Ñ+Ý+0°°c±¸1Ñ+=Ô+=�Ð'Ñ(Ý/4°Q¸±W¸aÑ/@Ô/@�Ð+Ñ,à˜EÐ"6Ô7Ñ7�Ø˜EÐ"3Ô4Ñ4�Ø˜5Ð!6Ô7Ñ7�Ø�U 5§9¢9Ð-?Ñ#@Ô#@Ð#VÀSÈ:ÑEUÑWÔWÑW�	Ø×%Ò% eÑ,Ô,Ð,Ñ,à�KŠK‰MŒMˆMðg3	ð 3	ð 3	ñ 3	ô 3	ð 3	ð 3	ð 3	ð 3	ð 3	ð 3	øøøð 3	ð 3	ð 3	ð 3	ð 3	ð 3	ð 3	ñ 3	ô 3	ð 3	ð 3	ð 3	ð 3	ð 3	ð 3	øøøð 3	ð 3	ð 3	ð 3	ðl  Ø$Ø#Ý˜Ñ(Ô(å+0°¸1Ñ+=Ô+=Ý(-¨h¸Ñ(:Ô(:Ý,1°'¸1Ñ,=Ô,=Ý(-¨i¸Ñ(;Ô(;Ý',Ø6?À!²m°m�X 	Ñ)¨EÑ1Ð1ÈÈAñ(ô (õ %*Ø6?À!²m°m�X 	Ñ)¨EÑ1Ð1ÈÈAñ%ô %õ ).Ø5>À²]°]�W˜yÑ(¨5Ñ0Ð0ÈÈ1ñ)ô )ðð ð
ð 
ð 	
s7   ÁK6ÁI;KËK6ËK#	Ë#K6Ë&K#	Ë'K6Ë6K:Ë=K:c                óà  — ddl m} |                      |¦  «        }|sd|g i dœS g }d}d}d}d}d}	|D �]O}
t          |
¦  «        }t	          |                     d¦  «        pd¦  «        }|                     d¦  «        �t	          |d         ¦  «        nd}|                     d	¦  «        �t	          |d	         ¦  «        nd}t	          |                     d
¦  «        pd¦  «        }|                     |||¬¦  «        }|                     |¦  «         t          |d         |z  d¦  «        |d<   |||z  z  }|�|||z  z  }|�|	||z  z  }	|d         dk    r|dz  }n|d         dk    r|dz  }| 	                    |¦  «         �ŒQ|dk    rt          ||z
  d¦  «        nd}d||t          |¦  «        t          |d¦  «        t          |d¦  «        t          |	d¦  «        ||||dk    p|dk    dœdœS )ux   Láº¥y báº£ng so sÃ¡nh 3 cá»™t (Báº£n váº½ Thiáº¿t káº¿ vs HSMT vs Thá»±c táº¿ Thi cÃ´ng) kÃ¨m cáº£nh bÃ¡o phÃ¡t sinh VO.r   rd   rR   )rS   r   r3   Úsummaryr   r   Úhsmt_quantityNÚactual_quantityr   ©Údesign_quantityrŒ   r�   Úvariance_quantityÚvariance_amount_vndÚvariation_statusÚvo_increaser   Úvo_decrease)Útotal_design_amount_vndÚtotal_hsmt_amount_vndÚtotal_actual_amount_vndÚnet_variance_amount_vndÚvo_increase_items_countÚvo_decrease_items_countÚhas_variation_orders)rS   r   r3   rv   r‹   )rw   re   r>   rx   rV   r#   Úcompute_triple_varianceÚupdater|   r7   r9   )r,   r   re   r3   Úvariance_itemsÚvo_increase_countÚvo_decrease_countÚtotal_design_valÚtotal_hsmt_valÚtotal_actual_valrZ   r‚   Ú
design_qtyÚhsmt_qtyÚact_qtyr]   Úv_resÚnet_variance_vnds                     r1   Úget_takeoff_triple_variancez/ErpTakeoffItemMixin.get_takeoff_triple_variance8  s½  € ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð ×/Ò/°
Ñ;Ô;ˆØð 	à#Ø(ØØð	ð ð ð ˆØÐØÐØÐØˆØÐàð "	)ñ "	)ˆCÝ˜‘I”IˆEÝ˜uŸyšy¨Ñ4Ô4Ð;¸Ñ<Ô<ˆJð —9’9˜_Ñ-Ô-Ð9õ �e˜OÔ,Ñ-Ô-Ð-àð ð —9’9Ð.Ñ/Ô/Ð;õ �eÐ-Ô.Ñ/Ô/Ð/àð õ
 ˜%Ÿ)š)Ð$4Ñ5Ô5Ð<¸Ñ=Ô=ˆEà*×BÒBØ *Ø&Ø 'ð Cñ ô ˆEð
 �LŠL˜ÑÔÐÝ+0°Ð7JÔ1KÈeÑ1SÐUVÑ+WÔ+WˆEÐ'Ñ(à 
¨UÑ 2Ñ2ÐØÐ#Ø (¨UÑ"2Ñ2�ØÐ"Ø  G¨e¡OÑ3Ð àÐ'Ô(¨MÒ9Ð9Ø! QÑ&Ð!Ð!ØÐ)Ô*¨mÒ;Ð;Ø! QÑ&Ð!à×!Ò! %Ñ(Ô(Ð(Ñ(ð <JÈAÒ;MÐ;M�EÐ" ^Ñ3°QÑ7Ô7Ð7ÐSVð 	ð
  Ø$Ø#Ý˜Ñ(Ô(å+0Ð1AÀ1Ñ+EÔ+EÝ).¨~¸qÑ)AÔ)AÝ+0Ð1AÀ1Ñ+EÔ+EØ+;Ø+<Ø+<à%¨Ò)ÐBÐ->ÀÒ-Bð
ð 
ð
ð 
ð 	
ó    c                ó  — ddl m} |                      |¦  «        }t          | d¦  «        r|                      |¦  «        nd}|r/|                     dd¦  «        › d|                     dd	¦  «        › �nd
}|                     ||¬¦  «        S )uS   1-Click tá»•ng há»£p nhu cáº§u váº­t tÆ° cÃ´ng trÆ°á»�ng (MR Requisition Schedule).r   rd   Úget_drawing_takeoffNÚdrawing_coder   z - Údrawing_titleu   Dá»± Ã¡n Ä�á»‹nh SÆ¡nu   CÃ´ng trÃ¬nh Ä�á»‹nh SÆ¡n)r3   Úproject_title)rw   re   r>   Úhasattrr¬   r#   Úaggregate_material_requisition)r,   r   re   r3   ÚtakeoffÚtitles         r1   Ú!generate_takeoff_material_requestz5ErpTakeoffItemMixin.generate_takeoff_material_requestˆ  sÌ   € ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð ×/Ò/°
Ñ;Ô;ˆõ �tÐ2Ñ3Ô3ðˆD×$Ò$ ZÑ0Ô0Ð0àð 	ð ð-ˆw�{Š{˜>¨2Ñ.Ô.ÐjÐj°7·;²;¸ÐPgÑ3hÔ3hÐjÐjÐjà,ð 	ð &×DÒDØ uð Eñ 
ô 
ð 	
rª   NrŒ   úfloat | Noner�   c                ó’  — ddl m} |                      ¦   «         5 }|                     ¦   «         5 }|                     d|f¦  «         |                     ¦   «         }|s	 ddd¦  «         ddd¦  «         dS t          |                     d¦  «        pd¦  «        }|                     |||¬¦  «        }	|                     d|||	d	         |	d
         |	d         |f¦  «         |                     ¦   «         }
| 	                    ¦   «          |
cddd¦  «         cddd¦  «         S # 1 swxY w Y   	 ddd¦  «         dS # 1 swxY w Y   dS )uk   Cáº­p nháº­t khá»‘i lÆ°á»£ng HSMT / Thá»±c táº¿ cá»§a má»™t dÃ²ng BoQ vÃ  tá»± Ä‘á»™ng tÃ­nh chÃªnh lá»‡ch.r   rd   z6SELECT * FROM erp_drawing_takeoff_items WHERE id = %s;Nr   r   rŽ   as  
                    UPDATE erp_drawing_takeoff_items
                    SET hsmt_quantity = %s,
                        actual_quantity = %s,
                        variance_quantity = %s,
                        variance_percentage = %s,
                        variation_status = %s
                    WHERE id = %s
                    RETURNING *;
                r�   Úvariance_percentager’   )
rw   re   r'   r(   r)   r+   rV   r#   rœ   r*   )r,   r?   rŒ   r�   re   r.   r/   rG   r¤   r§   Úupdateds              r1   Úupdate_takeoff_item_quantitiesz2ErpTakeoffItemMixin.update_takeoff_item_quantitiesž  sK  € ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð × Ò Ñ"Ô"ð &	 dØ—’‘”ð % #Ø—’ØLÈwÈjñô ð ð —l’l‘n”n�Øð  Øð%ð %ð %ñ %ô %ð %ð&	ð &	ð &	ñ &	ô &	ð &	ð &	ð &	õ # 3§7¢7¨:Ñ#6Ô#6Ð#=¸#Ñ>Ô>�
Ø.×FÒFØ$.Ø"/Ø$3ð Gñ ô �ð —’ð	ð &Ø'ØÐ1Ô2ØÐ3Ô4ØÐ0Ô1Øðñô ð ð( Ÿ,š,™.œ.�Ø—’‘”�ØðK%ð %ð %ð %ñ %ô %ð %ð&	ð &	ð &	ð &	ñ &	ô &	ð &	ð &	ð%ð %ð %ð %øøøð %ð %ð %ð %ð %ð&	ð &	ð &	ñ &	ô &	ð &	ð &	ð &	ð &	ð &	ð &	ð &	øøøð &	ð &	ð &	ð &	ð &	ð &	sA   ›D<°/D#ÁD<Á7BD#Ä
D<Ä#D'	Ä'D<Ä*D'	Ä+D<Ä<E ÅE )r	   r
   r   r
   )r3   r4   r   r5   )r   r$   r   r4   )r?   r$   r	   r
   r   r@   )r   r$   r   r5   )r   r$   rL   r$   r   r
   )r   r$   r   r
   )NN)r?   r$   rŒ   rµ   r�   rµ   r   r@   )Ú__name__Ú
__module__Ú__qualname__r2   r;   r>   rH   rK   rb   r‰   r©   r´   r¹   © rª   r1   r   r      sú   € € € € € ð&ð &ð &ð &ðB%!ð %!ð %!ð %!ðN
"ð 
"ð 
"ð 
"ðð ð ð ð(	ð 	ð 	ð 	ðV
ð V
ð V
ð V
ðp^
ð ^
ð ^
ð ^
ð@N
ð N
ð N
ð N
ð`
ð 
ð 
ð 
ð2 '+Ø(,ð	1ð 1ð 1ð 1ð 1ð 1ð 1rª   r   )Ú
__future__r   rz   Úloggingr%   Údatetimer   r   Útypingr   Ú	getLoggerrº   Úloggerr   r½   rª   r1   ú<module>rÄ      sª   ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð à	ˆÔ	˜8Ñ	$Ô	$€ðCð Cð Cð Cð Cñ Cô Cð Cð Cð Crª   