§
     ’j &  ã                  óŽ   — d dl mZ d dl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dd„Z G d„ de
¦  «        ZdS )é    )ÚannotationsN)Údate)ÚDecimal)ÚAnyé   )ÚTruthSyncHandlersMixinzdscons.invoice_truth.syncÚvalr   Úreturnr   c                óœ   — | €t          d¦  «        S 	 t          t          | ¦  «        ¦  «        S # t          $ r t          d¦  «        cY S w xY w)Nz0.0000)r   ÚstrÚ	Exception)r	   s    úPC:\Projects\DSCons\app\modules\invoices\application\invoice_truth\sync_engine.pyÚ
to_decimalr      s]   € Ø
€{Ý�xÑ Ô Ð ð!Ý•s˜3‘x”xÑ Ô Ð øÝð !ð !ð !Ý�xÑ Ô Ð Ð Ð ð!øøøs   “/ ¯AÁ
Ac                  ó   — e Zd ZdZ	 ddd
„ZdS )ÚTruthSyncMixinzUExtraction, normalization and synchronization from invoices into ground truth tables.NTÚ
company_idú
str | NoneÚpurge_draftsÚboolr
   údict[str, Any]c                ód
  — |                       ¦   «         5 }|                     ¦   «         5 }|s}|                     d¦  «         |                     ¦   «         }|rt	          |d         ¦  «        }n<|                     d¦  «         t	          |                     ¦   «         d         ¦  «        }d}|r|                     d¦  «         |j        }|                     d¦  «         |                     ¦   «         }t          |¦  «        dddd|g i dœ}d}	d}
|D �]…}|d         }|d	         pd
}|d         pd
}|d         pd
}|d         pd
}|d         pt          j	        ¦   «         }|d         pd
}|d         }|d         }|                     d|f¦  «         |                     ¦   «         }g }|r{|D ]v}| 
                    t	          |d         ¦  «        |d         |d         t          |d         ¦  «        t          |d         ¦  «        t          |d         ¦  «        dœ¦  «         Œw�nh|                     d¦  «        sd|v rýddlm}  |¦   «         }|                     |d¬¦  «        }t!          |                     dg ¦  «        d¬¦  «        D ]¯\  }}| 
                    d |                     dd |› �¦  «        |                     dd!¦  «        t          |                     dd¦  «        ¦  «        t          |                     dd¦  «        ¦  «        t          |                     d"d¦  «        ¦  «        dœ¦  «         Œ°nR| 
                    d d#|› �d!t%          d$¦  «        t          |d%         ¦  «        t          |d"         ¦  «        dœ¦  «         |D �]}|                      |d         |d         |d         |d&         |d'         |¬(¦  «        }|d)         }|d*k    rOd+|d,                              ¦   «         d d-…         › d.|	d/›�}|	dz  }	|                      ||||||||||||¦  «         Œ™|d0k    r|d1xx         dz  cc<   Œ°|d2k    rA|d3         } d4| d d5…         › d.|
d6›�}!|
dz  }
|                      |||!|| |||||||||¦  «         Œ÷|d7xx         dz  cc<   �Œ	�Œ‡|                     ¦   «          t0                               d8|› �¦  «         d9d:|d;         › d<|d=         › d>|d1         › d?|d@         › dA�	|dBœ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 )CNz!SELECT id FROM companies LIMIT 1;Úidut   INSERT INTO companies (name, tax_code) VALUES ('CÃ”NG TY TNHH XÃ‚Y Dá»°NG Ä�á»ŠNH SÆ N', '0202111150') RETURNING id;r   z©
                        DELETE FROM erp_equipment 
                        WHERE source_invoice_id IS NULL AND equipment_code NOT LIKE 'EQ-REAL-%';
                    aÖ  
                    SELECT 
                        id, invoice_number, invoice_series, template_code,
                        issue_date, seller_name, seller_tax_code,
                        subtotal_amount_vnd, vat_amount_vnd, total_amount_vnd,
                        xml_raw_content, matched_project_id, matched_wbs_id
                    FROM erp_invoices
                    WHERE direction = 'input'
                    ORDER BY issue_date ASC;
                )Útotal_invoices_scannedÚequipment_assets_addedÚrental_logs_addedÚwarehouse_materials_stagedÚservices_categorizedÚpurged_draft_equipmentÚequipment_detailsÚmaterial_summaryr   Úinvoice_seriesÚ Úinvoice_numberÚseller_nameÚseller_tax_codeÚ
issue_dateÚxml_raw_contentÚmatched_project_idÚmatched_wbs_ida  
                        SELECT id, item_order, item_name, unit, quantity, unit_price_vnd, total_item_amount_vnd
                        FROM erp_invoice_items
                        WHERE invoice_id = %s
                        ORDER BY item_order ASC;
                    Ú	item_nameÚunitÚquantityÚunit_price_vndÚtotal_item_amount_vnd)r   r*   r+   r,   Ú
unit_priceÚtotal_amountz<?xmlz<HDon>)ÚInvoiceProcessingServiceÚtruth_extractor)Úsource_channelÚitems)Ústartu   HÃ ng hÃ³a u   LÃ´Útotal_amount_vndu*   HÃ ng hÃ³a / Dá»‹ch vá»¥ cung cáº¥p bá»Ÿi z1.0000Úsubtotal_amount_vndr/   r0   )r*   r+   r,   r/   r0   r$   ÚclassificationÚOWNED_EQUIPMENTz	EQ-TRUTH-Úequipment_typeé   ú-Ú03dÚRENTAL_EQUIPMENTr   ÚWAREHOUSE_MATERIALÚmaterial_groupzMAT-é   Ú04dr   zCompleted Truth Extraction: Úsuccessu   TrÃ­ch xuáº¥t thÃ nh cÃ´ng r   u    thiáº¿t bá»‹ sá»Ÿ há»¯u, r   u,    lÃ´ váº­t tÆ° nháº­p kho, vÃ  phÃ¢n loáº¡i u    ca mÃ¡y thuÃª ngoÃ i tá»« r   u    hÃ³a Ä‘Æ¡n mua vÃ o.)ÚstatusÚmessageÚstats)Úget_connectionÚcursorÚexecuteÚfetchoner   ÚrowcountÚfetchallÚlenr   ÚtodayÚappendr   Ú
startswithÚ;app.modules.invoices.application.invoice_processing_servicer1   Úparse_xml_contentÚ	enumerateÚgetr   Úclassify_itemÚupperÚ_sync_owned_equipmentÚ_sync_warehouse_materialÚcommitÚloggerÚinfo)"Úselfr   r   ÚconnÚcurÚc_rowÚpurged_equipment_cntÚinvoicesrF   Úequipment_code_counterÚmaterial_code_counterÚinvÚinv_idÚseriesÚinv_numÚsellerÚ
seller_mstÚissue_dtÚxml_rawÚ
project_idÚwbs_idÚdb_itemsÚitems_to_processÚitr1   Úinv_svcÚparsedÚidxÚitemr8   Úc_typeÚeq_codeÚ	mat_groupÚmat_codes"                                     r   Úextract_and_sync_all_truthz)TruthSyncMixin.extract_and_sync_all_truth   sê  € ð × Ò Ñ"Ô"ð s	 dØ—’‘”ð r #Ø!ð 	?Ø—K’KÐ CÑDÔDÐDØŸLšL™NœN�EØð ?Ý%(¨¨t¬Ñ%5Ô%5˜
˜
àŸšð Sñô ð õ &)¨¯ª©¬¸Ô)=Ñ%>Ô%>˜
à'(Ð$Øð 8Ø—K’Kð !ñ ô ð ð ,/¬<Ð(à—’ð 	ñ 	ô 	ð 	ð Ÿ<š<™>œ>�õ /2°(©m¬mØ./Ø)*Ø23Ø,-Ø.BØ)+Ø(*ð	)ð 	)�ð *+Ð&Ø()Ð%Ø#ð }?ñ }?�CØ  œY�FØ Ð!1Ô2Ð8°b�FØ!Ð"2Ô3Ð9°r�GØ  Ô/Ð5°2�FØ!$Ð%6Ô!7Ð!=¸2�JØ" <Ô0Ð@µD´J±L´L�HØ!Ð"3Ô4Ð:¸�GØ!$Ð%9Ô!:�JØ Ð!1Ô2�Fà—K’Kðð  ˜	ñô ð ð  #Ÿ|š|™~œ~�Hà')Ð$Øð 0Ø"*ð ð ˜BØ,×3Ò3å*-¨b°¬h©-¬-Ø13°K´Ø,.¨v¬JÝ0:¸2¸j¼>Ñ0JÔ0JÝ2<¸RÐ@PÔ=QÑ2RÔ2RÝ4>Ø(*Ð+BÔ(Cñ5&ô 5&ð	!"ð 	!"ñô ð ð ñð !×+Ò+¨GÑ4Ô4ð "¸ÀGÐ8KÐ8Kðð ð ð ð ð ð #;Ð":Ñ"<Ô"<˜Ø!(×!:Ò!:Ø#Ð4Eð ";ñ "ô "˜õ (1°·²¸GÀRÑ1HÔ1HÐPQÐ'RÑ'RÔ'Rð ð ™G˜C Ø,×3Ò3à*.Ø13·²¸ÐEXÐSVÐEXÐEXÑ1YÔ1YØ,.¯FªF°6¸5Ñ,AÔ,AÝ0:¸2¿6º6À*ÈaÑ;PÔ;PÑ0QÔ0QÝ2<Ø(*¯ªÐ/?ÀÑ(CÔ(Cñ3&ô 3&õ 5?Ø(*¯ªÐ/AÀ1Ñ(EÔ(Eñ5&ô 5&ð!"ð !"ñô ð ð ðð  )×/Ò/à&*Ø-bÐZ`Ð-bÐ-bØ(-Ý,3°HÑ,=Ô,=Ý.8¸Ð=RÔ9SÑ.TÔ.TÝ0:¸3Ð?QÔ;RÑ0SÔ0Sðð ñ	ô 	ð 	ð !1ð 4?ñ 4?˜Ø)-×);Ò);Ø&*¨;Ô&7Ø!% f¤Ø%)¨*Ô%5Ø'+¨LÔ'9Ø)-¨nÔ)=Ø(.ð *<ñ *ô *˜ð "0Ð0@Ô!A˜Ø!Ð%6Ò6Ð6Ø&}°.ÐAQÔ2R×2XÒ2XÑ2ZÔ2ZÐ[]Ð\]Ð[]Ô2^Ð&}Ð&}ÐawÐ&}Ð&}Ð&}˜GØ2°aÑ7Ð2Ø ×6Ò6Ø #Ø *Ø &Ø &Ø 'Ø &Ø (Ø *Ø $Ø .Ø 'Ø %ñô ð ð ð $Ð'9Ò9Ð9Ø!Ð"5Ð6Ð6Ô6¸!Ñ;Ð6Ð6Ñ6Ð6Ø#Ð';Ò;Ð;Ø(6Ð7GÔ(H˜Ià R y°°!°¤}Ð RÐ RÐ7LÐ RÐ RÐ Rð %ð 2°QÑ6Ð1Ø ×9Ò9Ø #Ø *Ø (Ø $Ø )Ø &Ø *Ø &Ø &Ø 'Ø (Ø *Ø &Ø %ñô ð ð ð" "Ð"8Ð9Ð9Ô9¸QÑ>Ð9Ð9Ñ9Ñ9ñi4?ðl —’‘”�Ý—’ÐB¸5ÐBÐBÑCÔCÐCà'ð  w¸UÐC[Ô=\ð   wð   wÐx}ð  [ô  y\ð   wð   wð  JOð  Pcô  Jdð   wð   wð  AFð  G_ô  A`ð   wð   wð   wØ"ðð ð]rð rð rð rñ rô rð rðs	ð s	ð s	ð s	ñ s	ô s	ð s	ð s	ðrð rð rð røøøð rð rð rð rð rðs	ð s	ð s	ñ s	ô s	ð s	ð s	ð s	ð s	ð s	ð s	ð s	øøøð s	ð s	ð s	ð s	ð s	ð s	s5   •T%ªS	TÓ3T%ÔT	ÔT%ÔT	ÔT%Ô%T)Ô,T))NT)r   r   r   r   r
   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ry   © ó    r   r   r      sA   € € € € € Ø_Ð_ð CGðvð vð vð vð vð vð vr   r   )r	   r   r
   r   )Ú
__future__r   ÚloggingÚdatetimer   Údecimalr   Útypingr   Úsync_handlersr   Ú	getLoggerrZ   r   r   r~   r   r   ú<module>r‡      sÎ   ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à 1Ð 1Ð 1Ð 1Ð 1Ð 1à	ˆÔ	Ð6Ñ	7Ô	7€ð!ð !ð !ð !ðyð yð yð yð yÐ+ñ yô yð yð yð yr   