§
    dž’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
 d dlmZ dd	lmZ  ej        d
¦  «        Z G d„ de
¦  «        ZdS )é    )ÚannotationsN)Údate)ÚDecimal)ÚAny)ÚBasePostgresClient)ÚDSCONS_DEFAULT_TAX_CODEé   )ÚKNOWN_PARTNER_TAX_CODESzdscons.partners.syncc                  ó   — e Zd ZdZdd„ZdS )ÚPartnerSyncMixinzIInvoice extraction and automatic partner/customer/vendor synchronization.Úreturnúdict[str, Any]c                ó²  — |                       ¦   «         5 }|                     ¦   «         5 }|                     d¦  «         |                     ¦   «         }i }|D �]}|d         }|d         }t	          |d         ¦  «        }|d         pd}	|d         pd}
t          t	          |d         pd	¦  «        ¦  «        }|d
         rt	          |d
         ¦  «        nd}|dk    rW|d         pd                     ¦   «         }|d         pd                     ¦   «         }|d         pd                     ¦   «         }d}nV|d         pd                     ¦   «         }|d         pd                     ¦   «         }|d         pd                     ¦   «         }d}|s'|s�Œ8dt          t          |¦  «        ¦  «        dz  d›�}|t          k    s|dk    r�Œn||vrÅ| 
                    d¦  «        pjt          |¦  «        dk    pWd|                     ¦   «         v pAd|                     ¦   «         v p+d|                     ¦   «         v pd|                     ¦   «         v }|rdnd}||d|t          v dt          d	¦  «        t          d	¦  «        d ||g t          ¦   «         d!œ||<   ||         }|d"xx         d#z  cc<   |r |d$                              |¦  «         d|d%<   |rd|d&<   |d'xx         |z  cc<   nd|d(<   |d)xx         |z  cc<   |r2|d*         �||d*         k     r||d*<   |d+         �||d+         k    r||d+<   |r3|d,                              |pt#          d-d#d#¦  «        ||	|
||d.œ¦  «         �Œ	|                     d/¦  «         |                     d0¦  «         d }d }|                     ¦   «         D �]Ü\  }}|d,         }|                     d1„ ¬2¦  «         |r|d3         d4         n|}|r|d3         d5         nd}g }t          ¦   «         }|D ]ˆ}|d4                              ¦   «                              ¦   «         |d5                              ¦   «                              ¦   «         f}||vr*|                     |¦  «         |                     |¦  «         Œ‰t          |¦  «        d#k    rt          |¦  «        d#z
  nd }|                     d6|||d7         ||d&         |d%         |d(         |d'         |d)         |d"         |d*         |d+         |f¦  «         t	          |                     ¦   «         d         ¦  «        } |d#z  }|D ]I}!|                     d8| ||!d4         |!d5         |!d9         |!d         |!d         |!d:         f¦  «         |d#z  }ŒJ�ŒÞ|                     ¦   «          d;||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 )=u´   
        QuÃ©t toÃ n bá»™ hÃ³a Ä‘Æ¡n trong erp_invoices, gom nhÃ³m theo MST,
        xÃ¡c Ä‘á»‹nh tÃªn/Ä‘á»‹a chá»‰ má»›i nháº¥t vÃ  ghi nháº­n lá»‹ch sá»­ biáº¿n Ä‘á»™ng.
        a©  
                    SELECT 
                        id, direction, invoice_number, invoice_series, issue_date,
                        seller_name, seller_tax_code, seller_address,
                        buyer_name, buyer_tax_code, buyer_address,
                        total_amount_vnd, matched_project_id
                    FROM erp_invoices
                    ORDER BY issue_date ASC, created_at ASC;
                Ú	directionÚ
issue_dateÚidÚinvoice_numberÚ Úinvoice_seriesÚtotal_amount_vndz0.0000Úmatched_project_idNÚoutputÚbuyer_tax_codeÚ
buyer_nameÚbuyer_addressTÚseller_tax_codeÚseller_nameÚseller_addressFÚNO_MST_i@B Ú06dÚ
0202111150é   u	   cÃ¡ nhÃ¢nu   khÃ¡ch hÃ ng khÃ´ng láº¥yu   Ã´ngu   bÃ Ú
individualÚorganizationr   )Útax_codeÚcategoryÚis_customerÚ
is_partnerÚ	is_vendorÚtotal_output_revenueÚtotal_input_expenseÚinvoices_countÚfirst_transaction_dateÚlatest_transaction_dateÚhistory_recordsÚmatched_projectsr,   r	   r0   r(   r'   r*   r)   r+   r-   r.   r/   iç  )Úrecorded_dateÚ
invoice_idr   r   ÚnameÚaddressz DELETE FROM erp_partner_history;zDELETE FROM erp_partners;c                ó"   — | d         | d         fS )Nr1   r   © )Úrs    úCC:\Projects\DSCons\app\modules\partners\application\partner_sync.pyú<lambda>zNPartnerSyncMixin.extract_and_sync_all_partners_from_invoices.<locals>.<lambda>™   s   €  q¨Ô'9¸1Ð=MÔ;NÐ&O€ ó    )Úkeyéÿÿÿÿr3   r4   a4  
                        INSERT INTO erp_partners (
                            tax_code, company_name, partner_category, current_address,
                            is_customer, is_partner, is_vendor,
                            total_output_revenue_vnd, total_input_expense_vnd, total_invoices_count,
                            first_transaction_date, latest_transaction_date, history_change_count, status
                        ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, 'active')
                        RETURNING id;
                    r&   ah  
                            INSERT INTO erp_partner_history (
                                partner_id, tax_code, historical_name, historical_address,
                                source_invoice_id, source_invoice_number, source_invoice_series, recorded_date
                            ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s);
                        r2   r1   Úsuccess)ÚstatusÚtotal_partners_syncedÚtotal_history_records_created)Úget_connectionÚcursorÚexecuteÚfetchallÚstrr   ÚstripÚabsÚhashr   Ú
startswithÚlenÚlowerr
   ÚsetÚaddÚappendr   ÚitemsÚsortÚfetchoneÚcommit)"ÚselfÚconnÚcurÚinvoicesÚpartners_dataÚinvr   Úissue_dtÚinv_idÚinv_numÚ
inv_seriesÚamtÚproj_idÚp_taxÚp_nameÚp_addrÚis_outÚis_indivr&   Úp_entryÚsynced_countÚhistory_total_countr%   ÚpÚrecordsÚlatest_nameÚlatest_addrÚhistorical_changesÚseen_combosÚrecÚcomboÚhistory_change_countÚ
partner_idÚhs"                                     r8   Ú+extract_and_sync_all_partners_from_invoicesz<PartnerSyncMixin.extract_and_sync_all_partners_from_invoices   s   € ð
 × Ò Ñ"Ô"ð V	 dØ—’‘”ð U #à—’ð ñ ô ð ð Ÿ<š<™>œ>�ð <>�à#ð cñ c�CØ # KÔ 0�IØ" <Ô0�HÝ   T¤™^œ^�FØ!Ð"2Ô3Ð9°r�GØ!$Ð%5Ô!6Ð!<¸"�JÝ!¥# cÐ*<Ô&=Ð&IÀÑ"JÔ"JÑKÔK�Cð Ð3Ô4ð"�˜CÐ 4Ô5Ñ6Ô6Ð6à!ð ð ! HÒ,Ð,à!$Ð%5Ô!6Ð!<¸"× CÒ CÑ EÔ E˜Ø"% lÔ"3Ð"9°r×!@Ò!@Ñ!BÔ!B˜Ø"% oÔ"6Ð"<¸"×!CÒ!CÑ!EÔ!E˜Ø!%˜˜ð "%Ð%6Ô!7Ð!=¸2× DÒ DÑ FÔ F˜Ø"% mÔ"4Ð":¸×!AÒ!AÑ!CÔ!C˜Ø"%Ð&6Ô"7Ð"=¸2×!DÒ!DÑ!FÔ!F˜Ø!&˜à ð LØ%ð %Ù$Ø K­#­d°6©l¬lÑ*;Ô*;¸gÑ*EÐ KÐ KÐ K˜àÕ 7Ò7Ð7¸5ÀLÒ;PÐ;PÙ à MÐ1Ð1ð "×,Ò,¨YÑ7Ô7ð 7Ý" 5™zœz¨RÒ/ð7à*¨f¯lªl©n¬nÐ<ð7ð  ;¸f¿lºl¹n¼nÐLð7ð  &¨¯ª©¬Ð7ð	7ð
  %¨¯ª©¬Ð6ð !ð 4<Ð#O < <À˜ð ).Ø(0Ø+0Ø*/Õ3JÐ*JØ).Ý4;¸HÑ4EÔ4EÝ3:¸8Ñ3DÔ3DØ./Ø6>Ø7?Ø/1Ý03±´ð0ð 0˜ eÑ,ð ,¨EÔ2�GØÐ,Ð-Ð-Ô-°Ñ2Ð-Ð-Ñ-àð 5ØÐ 2Ô3×7Ò7¸Ñ@Ô@Ð@Ø04˜ Ñ-àð >Ø15˜ Ñ.ØÐ 6Ð7Ð7Ô7¸3Ñ>Ð7Ð7Ñ7Ð7à/3˜ Ñ,ØÐ 5Ð6Ð6Ô6¸#Ñ=Ð6Ð6Ñ6àð 
Jà#Ð$<Ô=ÐEØ'¨'Ð2JÔ*KÒKÐKà@H˜GÐ$<Ñ=à#Ð$=Ô>ÐFØ'¨'Ð2KÔ*LÒLÐLàAI˜GÐ$=Ñ>ð ð 
ØÐ 1Ô2×9Ò9à19Ð1M½TÀ$ÈÈ1Ñ=MÔ=MØ.4Ø29Ø2<Ø(.Ø+1ðð ñ	ô 	ð 	ùð —’Ð>Ñ?Ô?Ð?Ø—’Ð7Ñ8Ô8Ð8à �Ø&'Ð#à#0×#6Ò#6Ñ#8Ô#8ð Q1ñ Q1‘K�H˜aàÐ 1Ô2�GØ—L’LØOÐOð !ñ ô ð ð
 :AÐ"N '¨"¤+¨fÔ"5Ð"5Àh�KØ<CÐ"K '¨"¤+¨iÔ"8Ð"8È�Kð *,Ð&Ý"%¡%¤%�Kà&ð ;ð ;˜à œK×-Ò-Ñ/Ô/×5Ò5Ñ7Ô7Ø 	œN×0Ò0Ñ2Ô2×8Ò8Ñ:Ô:ð!˜ð !¨Ð3Ð3Ø'ŸOšO¨EÑ2Ô2Ð2Ø.×5Ò5°cÑ:Ô:Ð:øõ
 Ð1Ñ2Ô2°QÒ6Ð6õ Ð.Ñ/Ô/°!Ñ3Ð3àð )ð —K’Kðð %Ø'Ø˜jœMØ'Ø˜mÔ,Ø˜lœOØ˜kœNØÐ4Ô5ØÐ3Ô4ØÐ.Ô/ØÐ6Ô7ØÐ7Ô8Ø0ðñô ð õ4 "% S§\¢\¡^¤^°DÔ%9Ñ!:Ô!:�JØ  AÑ%�Lð 0ð 1ð 1˜ØŸšðð !+Ø (Ø ! &¤	Ø ! )¤Ø ! ,¤Ø !Ð"2Ô 3Ø !Ð"2Ô 3Ø ! /Ô 2ð	ñô ð ð$ ,¨qÑ0Ð+Ð+ñ'1ð* —’‘”�ð (Ø-9Ø5Hðð ðcUð Uð Uð Uñ Uô Uð UðV	ð V	ð V	ð V	ñ V	ô V	ð V	ð V	ðUð Uð Uð Uøøøð Uð Uð Uð Uð UðV	ð V	ð V	ñ V	ô V	ð V	ð V	ð V	ð V	ð V	ð V	ð V	øøøð V	ð V	ð V	ð V	ð V	ð V	s5   •WªU0V3ÖWÖ3V7	Ö7WÖ:V7	Ö;W×W×WN)r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rr   r6   r:   r8   r   r      s4   € € € € € ØSÐSð[ð [ð [ð [ð [ð [r:   r   )Ú
__future__r   ÚloggingÚdatetimer   Údecimalr   Útypingr   Úapp.core.postgres.baser   Ú;app.modules.invoices.application.invoice_processing_servicer   Ú	constantsr
   Ú	getLoggerÚloggerr   r6   r:   r8   ú<module>r�      sÞ   ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø _Ð _Ð _Ð _Ð _Ð _à .Ð .Ð .Ð .Ð .Ð .à	ˆÔ	Ð1Ñ	2Ô	2€ð^ð ^ð ^ð ^ð ^Ð)ñ ^ô ^ð ^ð ^ð ^r:   