§
    t�’jÁ  ã                  ó’   — d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZ dd„ZdS )é    )Úannotations)ÚDecimal)ÚAny)ÚFont)ÚALIGN_CENTERÚ
ALIGN_LEFTÚALIGN_RIGHTÚ
BORDER_BOXÚBORDER_TOTALÚFILL_HEADERÚ
FILL_TOTALÚFMT_CURRENCY_VNDÚFMT_DECIMAL_2ÚFMT_INTEGERÚ	FONT_DATAÚFONT_HEADERÚ	FONT_MONOÚFONT_SUBTITLEÚ
FONT_TITLEÚ
FONT_TOTALé   )ÚBoqRateBreakdownEngineÚtakeoffúdict[str, Any]Úitemsúlist[dict[str, Any]]c                ó�  — d| _         d| j        j        d         _        d| d<   t	          dddd¬	¦  «        | d         _        d
| d<   t	          dddd¬¦  «        | d         _        |                      d¦  «         d| d<   t          | d         _        t          | d         _	        | 
                    d¦  «        pd}|                      d¦  «         d|                     ¦   «         › d| 
                    dd¦  «        › �| d<   t          | d         _        t          | d         _	        g d¢}|D ]R\  }}|| |<   t          | |         _        t          | |         _        t          | |         _	        t           | |         _        ŒSd| j        d         _        d}t)          d¦  «        }t+          |d¦  «        D �]M\  }	}
t)          t-          |
 
                    d¦  «        pd¦  «        ¦  «        }t/          |
 
                    d ¦  «        p|
 
                    d!¦  «        pd"¦  «        }t1          j        |
 
                    d#d¦  «        |
 
                    d$d¦  «        |
 
                    d%d&¦  «        ||
 
                    d'd(¦  «        ¬)¦  «        }t/          | 
                    d*¦  «        pd"¦  «        }t/          | 
                    d+¦  «        pd"| 
                    d,¦  «        pd"z   ¦  «        }||z   dk    r||z   n|}|
 
                    d'¦  «        p| 
                    d'd-¦  «        }d.|› �|	t4          t          t6          fd/|› �|
 
                    d0¦  «        pd1|	d2›�t8          t          d fd3|› �|t8          t          d fd4|› �|
 
                    d#¦  «        pdt4          t:          d fd5|› �|
 
                    d6¦  «        p|
 
                    d7¦  «        pdt4          t:          d fd8|› �|
 
                    d%¦  «        pd&t4          t          d fd9|› �t/          |¦  «        t8          t<          t>          fd:|› �|t8          t<          t@          fd;|› �|t8          t<          t@          fd<|› �d=|› d>|› �tB          t<          t@          fd?|› �d@|› dA|› �t8          t<          t@          fg}|D ]H\  }}}}}|| |<   || |         _        || |         _	        t           | |         _        |r|| |         _"        ŒIdB| j        |         _        |dz  }�ŒO|}|                      d.|› dC|› �¦  «         dD| d.|› �<   tB          | d.|› �         _        t<          | d.|› �         _	        tF          | d.|› �         _        dE|dz
  › dF�| d?|› �<   tB          | d?|› �         _        t<          | d?|› �         _	        tF          | d?|› �         _        t@          | d?|› �         _"        tH          | d?|› �         _        dG| j        |         _        g dH¢}|D ]}tH          | |› |› �         _        ŒdIdJdJdKdLddJdMdMdMdNdHœ}| %                    ¦   «         D ]\  }}|| j&        |         _'        Œd S )ONu   2. BoQ Khá»‘i LÆ°á»£ngTr   u&   CÃ”NG TY TNHH XÃ‚Y Dá»°NG Ä�á»ŠNH SÆ NÚA1ÚArialé   Ú0F172A)ÚnameÚsizeÚboldÚcoloru3   MÃ£ sá»‘ thuáº¿: 0202111150 | Hotline: 0936.565.888ÚA2é	   Ú475569)r"   r#   Úitalicr%   zA4:K4uG   Báº¢NG Dá»° TOÃ�N CHI PHÃ� XÃ‚Y Dá»°NG & BÃ“C TÃ�CH KHá»�I LÆ¯á»¢NG BOQÚA4Úproject_nameu    Dá»° Ã�N XÃ‚Y Dá»°NG THá»°C Táº¾zA5:K5u   Háº¡ng má»¥c cÃ´ng trÃ¬nh: u    - Báº£n váº½: Údrawing_nameÚ ÚA5))ÚA7ÚSTT)ÚB7u   MÃ£ WBS)ÚC7u   MÃ£ Hiá»‡u Ä�M)ÚD7u(   TÃªn Háº¡ng Má»¥c / CÃ´ng TÃ¡c Thi CÃ´ng)ÚE7u&   Quy CÃ¡ch / KÃ­ch ThÆ°á»›c HÃ¬nh Há»�c)ÚF7u   Ä�VT)ÚG7u   Khá»‘i LÆ°á»£ng)ÚH7u   Ä�Æ¡n GiÃ¡ Váº­t Liá»‡u (VNÄ�))ÚI7u   Ä�Æ¡n GiÃ¡ NhÃ¢n CÃ´ng & MÃ¡y)ÚJ7u   Ä�Æ¡n GiÃ¡ Dá»± ToÃ¡n 2026)ÚK7u   ThÃ nh Tiá»�n Dá»± ToÃ¡n (VNÄ�)é   é   é   r   ÚquantityÚunit_price_vndÚ
unit_priceg        Ú	item_nameÚcategoryÚunitÚm3Ú	norm_codezAF.11110)rA   rB   rC   Útotal_unit_pricerE   Úmaterial_cost_vndÚlabor_cost_vndÚequipment_cost_vndu   Ä�M-2026ÚAÚBÚwbs_codezWBS-Ú02dÚCÚDÚEÚdimension_formulaÚspecificationÚFÚGÚHÚIÚJz=Hz+IÚKz=Gz*Jé   z:JuE   Tá»”NG Cá»˜NG CHI PHÃ� XÃ‚Y Dá»°NG Dá»° TOÃ�N TRÆ¯á»šC THUáº¾ (VNÄ�):z	=SUM(K8:Kú)é   )rJ   rK   rN   rO   rP   rS   rT   rU   rV   rW   rX   é   é   é*   é#   é   é   )(ÚtitleÚviewsÚ	sheetViewÚshowGridLinesr   ÚfontÚmerge_cellsr   r   Ú	alignmentÚgetÚupperr   r   r   Úfillr
   ÚborderÚrow_dimensionsÚheightr   Ú	enumerateÚstrÚfloatr   Úbreakdown_item_rater   r   r   r   r	   r   r   r   Únumber_formatr   r   r   Úcolumn_dimensionsÚwidth)Úws1r   r   r+   ÚheadersÚcell_refÚtextÚcurrent_rowÚtotal_boq_amountÚidxÚitemÚqtyr@   Ú	breakdownÚvl_priceÚ
nc_m_priceÚfinal_unit_priceÚnorm_code_valÚrow_dataÚvalÚfntÚalgÚnum_fmtÚ	total_rowÚcolsÚcolÚ
col_widthsÚ
col_letterru   s                                úEC:\Projects\DSCons\app\modules\takeoff\application\excel_sheet_boq.pyÚbuild_boq_sheetr�      sç  € Ø(€C„IØ+/€C„IÔ˜ÔÔ(ð 9€Cˆ�IÝ˜w¨R°dÀ(ÐKÑKÔK€Cˆ„I„NØE€Cˆ�IÝ˜w¨Q°tÀ8ÐLÑLÔL€Cˆ„I„Nð ‡O‚O�GÑÔÐØY€Cˆ�IÝ€Cˆ„I„NÝ&€Cˆ„IÔà—;’;˜~Ñ.Ô.ÐTÐ2T€LØ‡O‚O�GÑÔÐàl l×&8Ò&8Ñ&:Ô&:ÐlÐlÈ7Ï;Ê;ÐWeÐgiÑKjÔKjÐlÐlð ˆ�Iõ #€Cˆ„I„NÝ&€Cˆ„IÔðð ð €Gð "ð *ð *‰ˆ�$ØˆˆH‰Ý(ˆˆHŒÔÝ(ˆˆHŒÔÝ".ˆˆHŒÔÝ)ˆˆHŒÔÐØ#%€CÔ�qÔÔ à€KÝ˜q‘z”zÐå˜u aÑ(Ô(ð Qñ Q‰	ˆˆTÝ•c˜$Ÿ(š( :Ñ.Ô.Ð3°!Ñ4Ô4Ñ5Ô5ˆÝ˜4Ÿ8š8Ð$4Ñ5Ô5ÐV¸¿ºÀ,Ñ9OÔ9OÐVÐSVÑWÔWˆ
å*Ô>Ø—h’h˜{¨BÑ/Ô/Ø—X’X˜j¨"Ñ-Ô-Ø—’˜& $Ñ'Ô'Ø'Ø—h’h˜{¨JÑ7Ô7ð
ñ 
ô 
ˆ	õ ˜ŸšÐ':Ñ;Ô;ÐB¸sÑCÔCˆÝØ�]Š]Ð+Ñ,Ô,Ð3°Ø�}Š}Ð1Ñ2Ô2Ð9°cñ;ñ
ô 
ˆ
ð
 '/°Ñ&;¸qÒ%@Ð%@ˆH�zÑ!Ð!Àjð 	ð Ÿš Ñ-Ô-ÐW°·²¸{ÈJÑ1WÔ1Wˆð �ÐÐ ¥Yµ½kÐJà!�KÐ!Ð!Ø—’˜Ñ$Ô$Ð8Ð(8¨sÐ(8Ð(8Ð(8ÝÝØðð �ÐÐ ­y½,ÈÐMà!�KÐ!Ð!Ø—’˜Ñ%Ô%Ð+¨ÝÝØðð "�KÐ!Ð!Ø—’Ð,Ñ-Ô-ÐP°·²¸/Ñ1JÔ1JÐPÈbÝÝØðð "�KÐ!Ð!Ø—’˜Ñ Ô Ð( DÝÝØðð �ÐÐ¥ c¡
¤
­Iµ{ÅMÐRØ�ÐÐ ­)µ[ÕBRÐSØ�ÐÐ 
­Iµ{ÕDTÐUà!�KÐ!Ð!Ø1�[Ð1Ð1 KÐ1Ð1ÝÝÝ ðð "�KÐ!Ð!Ø1�[Ð1Ð1 KÐ1Ð1ÝÝÝ ððS0
ˆðd 19ð 	6ð 	6Ñ,ˆH�c˜3  WØˆC�‰MØ!$ˆC�ŒMÔØ&)ˆC�ŒMÔ#Ý#-ˆC�ŒMÔ Øð 6Ø.5��H”Ô+øà13ˆÔ˜;Ô'Ô.Ø�qÑˆ‰ð €IØ‡O‚OÐ0˜	Ð0Ð0 YÐ0Ð0Ñ1Ô1Ð1Øb€CˆˆIˆˆÑÝ *€CˆˆIˆˆÔÔÝ%0€CˆˆIˆˆÔÔ"Ý *€CˆˆIˆˆÔÔà7 y°1¡}Ð7Ð7Ð7€CˆˆIˆˆÑÝ *€CˆˆIˆˆÔÔÝ%0€CˆˆIˆˆÔÔ"Ý *€CˆˆIˆˆÔÔÝ)9€CˆˆIˆˆÔÔ&Ý".€CˆˆIˆˆÔÔØ+-€CÔ�yÔ!Ô(àBÐBÐB€DØð 7ð 7ˆÝ*6ˆˆsÐ�IÐÐÔ Ô'Ð'ð ØØØØØØØØØØðð €Jð (×-Ò-Ñ/Ô/ð 8ð 8Ñˆ
�EØ27ˆÔ˜jÔ)Ô/Ð/ð8ð 8ó    N)r   r   r   r   )Ú
__future__r   Údecimalr   Útypingr   Úopenpyxl.stylesr   Úapp.common.excel_stylerr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   Úboq_rate_breakdown_servicer   r�   © r�   rŽ   ú<module>r˜      s9  ðØ "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à  Ð  Ð  Ð  Ð  Ð  ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð& ?Ð >Ð >Ð >Ð >Ð >ðe8ð e8ð e8ð e8ð e8ð e8r�   