§
    í]¶jd  ã                  ó`   — d dl mZ d dlZd dlmZ  ej        d¦  «        Z G d„ d¦  «        ZdS )é    )ÚannotationsN)ÚDecimalz0dscons.postgres.project_crud.financial_mutationsc                  ó.   — e Zd ZdZdd„Zdd„Z	 dd d„ZdS )!ÚFinancialMutationsMixinz<Financial transactions mutations (IPC, Retention, Advances).Ú
project_idÚstrÚ
company_idÚperiod_numberÚintÚnet_payabler   Úretention_amountÚadvance_recovery_amountÚreturnú	list[str]c                óº  — g }d}|                       ¦   «         5 }	|	                     ¦   «         5 }
|dk    rŽdt          |¦  «        dd…                              ¦   «         › d|› �}|
                     ||||dd|d	|› �d
œ¦  «         |
                     ¦   «         }|r(|                     t          |d         ¦  «        ¦  «         |dk    rŽdt          |¦  «        dd…                              ¦   «         › d|› �}|
                     ||||dd|d|› �d
œ¦  «         |
                     ¦   «         }|r(|                     t          |d         ¦  «        ¦  «         |dk    rPdt          |¦  «        dd…                              ¦   «         › d|› �}|
                     ||||dd|d|› �d
œ¦  «         ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   |S )up   Táº¡o cÃ¡c giao dá»‹ch ghi nháº­n sá»‘ thu IPC, tiá»�n táº¡m á»©ng thu há»“i vÃ  tiá»�n giá»¯ láº¡i báº£o hÃ nh.a  
            INSERT INTO erp_financial_transactions (
                company_id, project_id, transaction_code, transaction_type, direction,
                amount, transaction_date, accounting_status, notes
            )
            VALUES (
                %(company_id)s, %(project_id)s, %(transaction_code)s, %(transaction_type)s, %(direction)s,
                %(amount)s, CURRENT_DATE, 'planned', %(notes)s
            )
            ON CONFLICT (transaction_code) DO NOTHING
            RETURNING id;
        r   zIPC-NET-Né   z-DOTÚstage_paymentÚinflowu$   Ä�á»� nghá»‹ thanh toÃ¡n IPC Ä‘á»£t )r	   r   Útransaction_codeÚtransaction_typeÚ	directionÚamountÚnotesÚidzIPC-RET-Úretention_releaseu0   TrÃ­ch láº­p giá»¯ láº¡i báº£o hÃ nh IPC Ä‘á»£t zIPC-ADV-Úadvance_paymentu*   Kháº¥u trá»« thu há»“i táº¡m á»©ng Ä‘á»£t )Úget_connectionÚcursorr   ÚupperÚexecuteÚfetchoneÚappend)Úselfr   r	   r
   r   r   r   Útransaction_idsÚsqlÚconnÚcurÚcode_netÚrowÚcode_retÚcode_advs                  úHC:\Projects\DSCons\app\core\postgres\project_crud\financial_mutations.pyÚ!create_ipc_financial_transactionsz9FinancialMutationsMixin.create_ipc_financial_transactions   s½  € ð ˆðˆð × Ò Ñ"Ô"ð 5	 d¨D¯KªK©M¬Mð 5	¸Sà˜QŠˆØV¥c¨*¡o¤o°b°q°bÔ&9×&?Ò&?Ñ&AÔ&AÐVÐVÀ}ÐVÐV�Ø—’Øà&0Ø&0Ø,4Ø,;Ø%-Ø"-Ø!WÈÐ!WÐ!Wðð ñô ð ð —l’l‘n”n�Øð ;Ø#×*Ò*­3¨s°4¬y©>¬>Ñ:Ô:Ð:ð   !Ò#Ð#ØV¥c¨*¡o¤o°b°q°bÔ&9×&?Ò&?Ñ&AÔ&AÐVÐVÀ}ÐVÐV�Ø—’Øà&0Ø&0Ø,4Ø,?Ø%-Ø"2Ø!cÐTaÐ!cÐ!cðð ñô ð ð —l’l‘n”n�Øð ;Ø#×*Ò*­3¨s°4¬y©>¬>Ñ:Ô:Ð:ð '¨Ò*Ð*ØV¥c¨*¡o¤o°b°q°bÔ&9×&?Ò&?Ñ&AÔ&AÐVÐVÀ}ÐVÐV�Ø—’Øà&0Ø&0Ø,4Ø,=Ø%-Ø"9Ø!]ÈmÐ!]Ð!]ðð ñô ð ðU5	ð 5	ð 5	ñ 5	ô 5	ð 5	ð 5	ð 5	ð 5	ð 5	ð 5	øøøð 5	ð 5	ð 5	ð 5	ð 5	ð 5	ð 5	ñ 5	ô 5	ð 5	ð 5	ð 5	ð 5	ð 5	ð 5	øøøð 5	ð 5	ð 5	ð 5	ðl Ðs5   ™G®E?F9Æ-GÆ9F=	Æ=GÇ F=	ÇGÇGÇGúlist[dict[str, Any]]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 )uG   Láº¥y danh sÃ¡ch cÃ¡c Ä‘á»£t táº¡m á»©ng, nghiá»‡m thu thanh toÃ¡n IPC.zÿ
            SELECT i.*, inv.invoice_number, inv.invoice_series
            FROM erp_project_ipcs i
            LEFT JOIN erp_invoices inv ON i.matched_invoice_id = inv.id
            WHERE i.project_id = %s
            ORDER BY i.ipc_number ASC;
        N)r   r   r    Úfetchall)r#   r   r%   r&   r'   s        r,   Úlist_project_ipcsz)FinancialMutationsMixin.list_project_ipcs]   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NÚ
ipc_numberÚbilling_period_startÚAnyÚbilling_period_endÚgross_claimed_amount_vndÚadvance_recovery_amount_vndÚretention_withheld_amount_vndÚnet_certified_amount_vndÚstatusÚmatched_invoice_idú
Any | Nonec                óŽ  — d}|                       ¦   «         5 }|                     ¦   «         5 }|                     ||||||||||	|
f
¦  «         |                     ¦   «         d         }|                     ¦   «          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 )u#   Táº¡o Ä‘á»£t IPC thanh toÃ¡n má»›i.a«  
            INSERT INTO erp_project_ipcs (
                project_id, ipc_number, billing_period_start, billing_period_end,
                gross_claimed_amount_vnd, advance_recovery_amount_vnd,
                retention_withheld_amount_vnd, net_certified_amount_vnd,
                status, matched_invoice_id
            ) VALUES (
                %s, %s, %s, %s, %s, %s, %s, %s, %s, %s
            ) RETURNING id;
        r   N)r   r   r    r!   Úcommitr   )r#   r   r2   r3   r5   r6   r7   r8   r9   r:   r;   r%   r&   r'   Ú
created_ids                  r,   Úcreate_project_ipcz*FinancialMutationsMixin.create_project_ipcj   sk  € ð	ˆð × Ò Ñ"Ô"ð 	# d¨D¯KªK©M¬Mð 	#¸SØ�KŠKØàØØ(Ø&Ø,Ø/Ø1Ø,ØØ&ðñô ð ð Ÿš™œ¨Ô-ˆJØ�KŠK‰MŒMˆMÝ�z‘?”?ð%	#ð 	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#ð 	#ð 	#s5   —B:¬AB"Â	B:Â"B&	Â&B:Â)B&	Â*B:Â:B>ÃB>)r   r   r	   r   r
   r   r   r   r   r   r   r   r   r   )r   r   r   r.   )N)r   r   r2   r   r3   r4   r5   r4   r6   r   r7   r   r8   r   r9   r   r:   r   r;   r<   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r-   r1   r@   © ó    r,   r   r   	   se   € € € € € ØFÐFðOð Oð Oð Oðb"ð "ð "ð "ð0 *.ð*#ð *#ð *#ð *#ð *#ð *#ð *#rF   r   )Ú
__future__r   ÚloggingÚdecimalr   Ú	getLoggerÚloggerr   rE   rF   r,   ú<module>rL      s�   ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð à	ˆÔ	ÐMÑ	NÔ	N€ðK#ð K#ð K#ð K#ð K#ñ K#ô K#ð K#ð K#ð K#rF   