§
    s�’j  ã                  óÚ  — d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	 d dl
mZ d dlmZ d dlmZ dd	lmZmZ  e¦   «         Ze                     d
¦  «         ee¦  «        fdd„¦   «         Ze                     d¦  «         ee¦  «        fdd„¦   «         Ze                     d¦  «         ee¦  «        fd d„¦   «         Ze                     dd¬¦  «         ee¦  «        fd!d„¦   «         ZdS )"é    )Úannotations)ÚDecimal)ÚAny)Ú	APIRouterÚDependsÚHTTPException)Úget_current_user)ÚProjectCrudRepository)ÚAISiteDiaryServiceé   )ÚIpcCreateRequestÚVoiceSiteDiaryRequestz'/projects/{project_id}/voice-site-diaryÚ
project_idÚstrÚpayloadr   Úcurrent_userúdict[str, Any]Úreturnc                ón   — t          ¦   «         }|                     | |j        |j        |j        ¬¦  «        S )ug   Xá»­ lÃ½ bÃ³c tÃ¡ch nháº­t kÃ½ thi cÃ´ng tá»« giá»�ng nÃ³i / vÄƒn báº£n cá»§a Ká»¹ sÆ° cÃ´ng trÆ°á»�ng.)r   Útranscript_textÚweather_overrideÚtemp_override)r   Úprocess_voice_to_diaryr   r   Útemperature_override)r   r   r   Úservices       úGC:\Projects\DSCons\app\api\routers\advanced_modules\diary_ipc_routes.pyÚcreate_voice_site_diaryr      sA   € õ !Ñ"Ô"€GØ×)Ò)ØØÔ/Ø Ô1ØÔ2ð	 *ñ ô ð ó    z3/projects/{project_id_or_code}/generate-ipc-dossierÚproject_id_or_codec                óH   — t          ¦   «         }|                     | ¦  «        S )uL   Tá»± Ä‘á»™ng gom vÃ  láº¯p rÃ¡p bá»™ há»“ sÆ¡ thanh toÃ¡n IPC chuáº©n FIDIC.)r   Úassemble_fidic_ipc_dossier)r   r   r   s      r   Úgenerate_fidic_ipc_dossierr"   !   s$   € õ !Ñ"Ô"€GØ×-Ò-Ð.@ÑAÔAÐAr   z/projects/{project_id}/ipcsúlist[dict[str, Any]]c                óŠ  — t          ¦   «         }|                     | ¦  «        }|st          dd¬¦  «        ‚|d         }d}|                     ¦   «         5 }|                     ¦   «         5 }|                     ||f¦  «         |                     ¦   «         }ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   g }	|D ]ú}
|	                     t          |
d         ¦  «        t          |
d         ¦  «        |
d         |
d	         rt          |
d	         ¦  «        nd|
d
         rt          |
d
         ¦  «        ndt          |
d         ¦  «        t          |
d         ¦  «        t          |
d         ¦  «        t          |
d         ¦  «        |
d         |
d         r|
d         pd› d|
d         pd› �nddœ¦  «         Œû|	S )uk   Láº¥y danh sÃ¡ch cÃ¡c Ä‘á»£t táº¡m á»©ng, nghiá»‡m thu thanh toÃ¡n giai Ä‘oáº¡n IPC vÃ  tiá»�n giá»¯ láº¡i.é”  õ   KhÃ´ng tÃ¬m tháº¥y dá»± Ã¡n©Ústatus_codeÚdetailÚidzç
        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;
    Nr   Ú
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Úinvoice_seriesÚ ú-Úinvoice_number)r*   r   r+   r,   r-   r.   r/   r0   r1   r2   Úinvoice_ref)
r
   Úget_project_detailr   Úget_connectionÚcursorÚexecuteÚfetchallÚappendr   Úfloat)r   r   Úrepor)   Úp_idÚsqlÚconnÚcurÚrowsÚ	formattedÚrs              r   Úlist_project_ipcsrH   +   st  € õ !Ñ"Ô"€DØ×$Ò$ ZÑ0Ô0€FØð SÝ¨Ð4QÐRÑRÔRÐRà�$Œ<€Dð€Cð 
×	Ò	Ñ	Ô	ð  $¨¯ª©¬ð ¸Ø�Š�C˜$˜Ñ!Ô!Ð!Ø�|Š|‰~Œ~ˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð €IØð 
ð 
ˆØ×Òå˜!˜Dœ'‘l”lÝ! ! L¤/Ñ2Ô2Ø œoàÐ+Ô,ð)­¨AÐ.DÔ,EÑ(FÔ(FÐ(FààÐ)Ô*ð'¥c¨!Ð,@Ô*AÑ&BÔ&BÐ&BàÝ,1°!Ð4NÔ2OÑ,PÔ,PÝ/4°QÐ7TÔ5UÑ/VÔ/VÝ16ØÐ5Ô6ñ2ô 2õ -2°!Ð4NÔ2OÑ,PÔ,PØ˜Hœ+àÐ)Ô*ð  !Ð$4Ô"5Ð";¸ÐYÐY¸aÐ@PÔ>QÐ>WÐUWÐYÐYÐYàð'ð ñ	
ô 	
ð 	
ð 	
ð. Ðs6   ÁB9Á*,B"ÂB9Â"B&	Â&B9Â)B&	Â*B9Â9B=Ã B=éÉ   )r(   r   c                óæ  — t          ¦   «         }|                     | ¦  «        }|st          dd¬¦  «        ‚|d         }t          t	          |j        ¦  «        ¦  «        }t          t	          |j        ¦  «        ¦  «        }t          t	          |j        ¦  «        ¦  «        }t          t	          |j        ¦  «        ¦  «        }	|dk    rFt          t	          | 	                    d¦  «        pd¦  «        ¦  «        t          d¦  «        z  }
||
z  }|dk    rFt          t	          | 	                    d	¦  «        pd
¦  «        ¦  «        t          d¦  «        z  }||z  }|	dk    r||z
  |z
  }	d}	 | 
                    ¦   «         5 }|                     ¦   «         5 }|                     |||j        |j        |j        ||||	|j        |j        f
¦  «         |                     ¦   «         }|rt	          |d         ¦  «        nd}|                     ¦   «          ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   d|d|j        › d�dœS # t(          $ r}t          dd|›�¬¦  «        ‚d}~ww xY w)uT   Táº¡o Ä‘á»£t IPC thanh toÃ¡n má»›i kÃ¨m háº¡ch toÃ¡n giá»¯ láº¡i tiá»�n báº£o hÃ nh.r%   r&   r'   r*   r   Úadvance_payment_percentg      $@éd   Úretention_percentg      @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;
    NÚsuccessu   Táº¡o Ä‘á»£t IPC sá»‘ u    thÃ nh cÃ´ng.)r2   Úipc_idÚmessagei�  u   KhÃ´ng thá»ƒ táº¡o Ä‘á»£t IPC: )r
   r9   r   r   r   r.   r/   r0   r1   Úgetr:   r;   r<   r+   r,   r-   r2   r3   ÚfetchoneÚcommitÚ	Exception)r   r   r   r@   r)   rA   ÚgrossÚadvanceÚ	retentionÚnetÚadvance_percentrM   rB   rC   rD   ÚresrO   Úes                     r   Úcreate_project_ipcr\   ^   s  € õ !Ñ"Ô"€DØ×$Ò$ ZÑ0Ô0€FØð SÝ¨Ð4QÐRÑRÔRÐRà�$Œ<€DÝ•C˜Ô8Ñ9Ô9Ñ:Ô:€EÝ•c˜'Ô=Ñ>Ô>Ñ?Ô?€GÝ�˜GÔAÑBÔBÑCÔC€IÝ
•#�gÔ6Ñ7Ô7Ñ
8Ô
8€Cà�!‚|€|Ý!Ý�—
’
Ð4Ñ5Ô5Ð=¸Ñ>Ô>ñ
ô 
å�C‰LŒLñˆð ˜/Ñ)ˆà�A‚~€~Ý#Ý�—
’
Ð.Ñ/Ô/Ð6°3Ñ7Ô7ñ
ô 
å�C‰LŒLñÐð Ð-Ñ-ˆ	à
ˆa‚x€xØ�g‰o 	Ñ)ˆð	€Cð]Ø× Ò Ñ"Ô"ð 	 d¨D¯KªK©M¬Mð 	¸SØ�KŠKØàØÔ&ØÔ0ØÔ.ØØØØØ”NØÔ.ðñô ð ð —,’,‘.”.ˆCØ'*Ð4•S˜˜Tœ‘^”^�^°ˆFØ�KŠK‰MŒMˆMð%	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð(  ØØR°Ô0BÐRÐRÐRð
ð 
ð 	
øõ
 ð ]ð ]ð ]Ý¨Ð4[ÐVWÐ4[Ð4[Ð\Ñ\Ô\Ð\øøøøð]øøøsa   Å,I Æ H3ÆA;HÈH3ÈH 	È H3È#H 	È$H3È'I È3H7È7I È:H7È;I É
I0ÉI+É+I0N)r   r   r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r#   )r   r   r   r   r   r   r   r   )Ú
__future__r   Údecimalr   Útypingr   Úfastapir   r   r   Úapp.api.routers.authr	   Ú)app.core.postgres.project_crud_repositoryr
   Ú"app.services.ai_site_diary_servicer   Úmodelsr   r   ÚrouterÚpostr   r"   rQ   rH   r\   © r   r   ú<module>rh      sá  ðØ "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5à 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø KÐ KÐ KÐ KÐ KÐ KØ AÐ AÐ AÐ AÐ AÐ Aà ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;à	ˆ‰Œ€ð ‡‚Ð6Ñ7Ô7ð $+ 7Ð+;Ñ#<Ô#<ðð ð ð ñ 8Ô7ðð ‡‚ÐBÑCÔCð $+ 7Ð+;Ñ#<Ô#<ðBð Bð Bð Bñ DÔCðBð ‡‚Ð)Ñ*Ô*ð $+ 7Ð+;Ñ#<Ô#<ð/ð /ð /ð /ñ +Ô*ð/ðd ‡‚Ð*¸€Ñ<Ô<ð $+ 7Ð+;Ñ#<Ô#<ðD]ð D]ð D]ð D]ñ =Ô<ðD]ð D]ð D]r   