§
    “´›jQ  ã                  ól   — d dl mZ d dlZd dlmZ d dlmZ  ej        e¦  «        Z G d„ d¦  «        Z	dS )é    )ÚannotationsN)Údatetime)ÚAnyc                  óL   — e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 d d!d„Zd"d„Z	 d#d$d„Zd%d„ZdS )&ÚErpDocumentReadMixinNTr   Úcategoryú
str | NoneÚdocument_groupÚdocument_typeÚ
project_idÚproject_stageÚsignature_statusÚquarantine_statusÚactive_onlyÚboolÚsearchÚyearú
int | NoneÚlimitÚoffsetÚintÚreturnúlist[dict[str, Any]]c           	     ó  — d}g }|r|dz  }|r#|dk    r|dz  }|                      |||g¦  «         |r |dk    r|dz  }|                     |¦  «         |r |dk    r|dz  }|                     |¦  «         |r |dk    r|dz  }|                     |¦  «         |r |dk    r|dz  }|                     |¦  «         |r |dk    r|d	z  }|                     |¦  «         |r"|dk    r|d
z  }|                      ||g¦  «         |
r|dz  }|                     |
¦  «         |	r9|dz  }d|	                     ¦   «         › d�}|                      |||||||g¦  «         |dz  }|�|dz  }|                      ||g¦  «         |dz  }|                      ¦   «         5 }|                     ¦   «         5 }|                     ||¦  «         |                     ¦   «         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�   Láº¥y danh sÃ¡ch vÄƒn báº£n theo cÃ¡c bá»™ lá»�c giai Ä‘oáº¡n, nhÃ³m, loáº¡i vÄƒn báº£n, tráº¡ng thÃ¡i kÃ½, nÄƒm vÃ  phÃ¢n trang.z¾
            SELECT d.*, p.project_name, count(*) OVER() as full_count
            FROM erp_documents d
            LEFT JOIN projects p ON d.project_id = p.id
            WHERE 1=1
        z AND d.is_active_version = TRUEÚallzL AND (d.category = %s OR d.document_direction = %s OR d.document_group = %s)z AND d.document_group = %sz AND d.document_type = %sz AND d.project_stage = %sz AND d.signature_status = %sz AND d.quarantine_status = %sz5 AND (d.project_id::text = %s OR p.project_code = %s)z) AND EXTRACT(YEAR FROM d.issue_date) = %saI   AND (
                d.document_code ILIKE %s 
                OR d.document_title ILIKE %s 
                OR d.issuer_name ILIKE %s 
                OR d.partner_name ILIKE %s
                OR d.summary_content ILIKE %s
                OR d.signer_name ILIKE %s
                OR d.partner_tax_code ILIKE %s
            )ú%z9 ORDER BY d.issue_date DESC NULLS LAST, d.created_at DESCNz LIMIT %s OFFSET %sú;)ÚextendÚappendÚstripÚget_connectionÚcursorÚexecuteÚfetchall)Úselfr   r
   r   r   r   r   r   r   r   r   r   r   ÚsqlÚparamsÚpatternÚconnÚcurs                     úDC:\Projects\DSCons\app\core\postgres\clients\document_read_client.pyÚlist_documentsz#ErpDocumentReadMixin.list_documents   sP  € ð ˆð ˆØð 	5ØÐ4Ñ4ˆCØð 	:˜ EÒ)Ð)ØÐaÑaˆCØ�MŠM˜8 X¨xÐ8Ñ9Ô9Ð9Øð 	*˜n°Ò5Ð5ØÐ/Ñ/ˆCØ�MŠM˜.Ñ)Ô)Ð)Øð 	)˜]¨eÒ3Ð3ØÐ.Ñ.ˆCØ�MŠM˜-Ñ(Ô(Ð(Øð 	)˜]¨eÒ3Ð3ØÐ.Ñ.ˆCØ�MŠM˜-Ñ(Ô(Ð(Øð 	,Ð 0°EÒ 9Ð 9ØÐ1Ñ1ˆCØ�MŠMÐ*Ñ+Ô+Ð+Øð 	-Ð!2°eÒ!;Ð!;ØÐ2Ñ2ˆCØ�MŠMÐ+Ñ,Ô,Ð,Øð 	4˜*¨Ò-Ð-ØÐJÑJˆCØ�MŠM˜: zÐ2Ñ3Ô3Ð3Øð 	 ØÐ>Ñ>ˆCØ�MŠM˜$ÑÔÐØð 	Øð ñ ˆCð ,˜&Ÿ,š,™.œ.Ð+Ð+Ð+ˆGØ�MŠMØ˜' 7¨G°W¸gÀwÐOñô ð ð 	ÐJÑJˆØÐØÐ(Ñ(ˆCØ�MŠM˜5 &˜/Ñ*Ô*Ð*Øˆs‰
ˆà× Ò Ñ"Ô"ð 	" d¨D¯KªK©M¬Mð 	"¸SØ�KŠK˜˜VÑ$Ô$Ð$Ø—<’<‘>”>ð	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð 	"ð 	"s6   ÆHÆ'*G*ÇHÇ*G.	Ç.HÇ1G.	Ç2HÈHÈ	HÚdoc_idÚstrúdict[str, Any] | Nonec                óª  — ddl }	 |                     t          |¦  «        ¦  «         n# t          t          f$ r Y dS w xY w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 )u5   Láº¥y thÃ´ng tin chi tiáº¿t má»™t vÄƒn báº£n theo id.r   Nz¦
            SELECT d.*, p.project_name
            FROM erp_documents d
            LEFT JOIN projects p ON d.project_id = p.id
            WHERE d.id = %s;
        )	ÚuuidÚUUIDr.   Ú
ValueErrorÚAttributeErrorr!   r"   r#   Úfetchone)r%   r-   r1   r&   r)   r*   s         r+   Úget_documentz!ErpDocumentReadMixin.get_documentU   sv  € àˆˆˆð	Ø�IŠI•c˜&‘k”kÑ"Ô"Ð"Ð"øÝ�NÐ+ð 	ð 	ð 	Ø�4�4ð	øøøðˆð × Ò Ñ"Ô"ð 	" d¨D¯KªK©M¬Mð 	"¸SØ�KŠK˜˜f˜YÑ'Ô'Ð'Ø—<’<‘>”>ð	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð 	"ð 	"sB   †") ©>½>ÁCÁ,+B0ÂCÂ0B4	Â4CÂ7B4	Â8CÃCÃCÚdoc_typeúdict[str, Any]c                óð  — |st          j        ¦   «         j        }|                     ¦   «                              ¦   «         }|                      ¦   «         5 }|                     ¦   «         5 }|                     d||f¦  «         |                     ¦   «         }|r|d         nd}|dz   }|d›d|› d|› 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 )
uO   Láº¥y sá»‘ vÄƒn báº£n káº¿ tiáº¿p theo loáº¡i vÄƒn báº£n vÃ  nÄƒm hiá»‡n táº¡i.z�
                    SELECT count(*) FROM erp_documents
                    WHERE document_type = %s AND EXTRACT(YEAR FROM issue_date) = %s;
                Úcountr   é   Ú02dú/u   -Ä�S)r7   r   Únext_numberÚ	next_codeN)	r   Únowr   Úupperr    r!   r"   r#   r5   )	r%   r7   r   r)   r*   ÚrowÚcurrent_numÚnext_numr?   s	            r+   Úget_next_document_codez+ErpDocumentReadMixin.get_next_document_codeh   s·  € ð ð 	'Ý”<‘>”>Ô&ˆDØ—>’>Ñ#Ô#×)Ò)Ñ+Ô+ˆà× Ò Ñ"Ô"ð 	 d¨D¯KªK©M¬Mð 	¸Sà�KŠKðð ˜4Ð ñô ð ð —,’,‘.”.ˆCØ*-Ð4˜#˜gœ,˜,°1ˆKØ" Q‘ˆHØ#Ð?Ð?Ð?¨$Ð?Ð?°Ð?Ð?Ð?ˆIð %ØØ'Ø&ð	ð ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s7   ÁC+Á*ACÂ:C+ÃC	ÃC+ÃC	ÃC+Ã+C/Ã2C/ÚNonec                ó2  — d}	 |                       ¦   «         5 }|                     ¦   «         5 }|                     |¦  «         |                     ¦   «          ddd¦  «         n# 1 swxY w Y   ddd¦  «         dS # 1 swxY w Y   dS # t          $ r Y dS w xY w)u~   Ä�áº£m báº£o báº£ng erp_documents cÃ³ Ä‘áº§y Ä‘á»§ cá»™t file_hash vÃ  cÃ¡c chá»‰ má»¥c phá»¥c vá»¥ phÃ¡t hiá»‡n trÃ¹ng láº·p.zË
            ALTER TABLE erp_documents
            ADD COLUMN IF NOT EXISTS file_hash VARCHAR(64);
            CREATE INDEX IF NOT EXISTS idx_erp_documents_file_hash ON erp_documents(file_hash);
        N)r!   r"   r#   ÚcommitÚ	Exception)r%   r&   r)   r*   s       r+   Ú_ensure_document_columnsz-ErpDocumentReadMixin._ensure_document_columns…   s#  € ðˆð
	Ø×$Ò$Ñ&Ô&ð ¨$°·²±´ð ÀØ—’˜CÑ Ô Ð Ø—’‘”�ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð øõ ð 	ð 	ð 	ØˆDˆDð	øøøsW   „B ˜A;­*A#ÁA;Á#A'	Á'A;Á*A'	Á+A;Á.B Á;A?Á?B ÂA?ÂB Â
BÂB)NNNNNNNTNNNr   )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.   r   r/   )N)r7   r.   r   r   r   r8   )r   rF   )Ú__name__Ú
__module__Ú__qualname__r,   r6   rE   rJ   © ó    r+   r   r   
   sŸ   € € € € € ð  $Ø%)Ø$(Ø!%Ø$(Ø'+Ø(,Ø Ø!ØØ ØðH"ð H"ð H"ð H"ð H"ðT"ð "ð "ð "ð( 15ðð ð ð ð ð:ð ð ð ð ð rO   r   )
Ú
__future__r   Úloggingr   Útypingr   Ú	getLoggerrK   Úloggerr   rN   rO   r+   ú<module>rU      s’   ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à	ˆÔ	˜8Ñ	$Ô	$€ðGð Gð Gð Gð Gñ Gô Gð Gð Gð GrO   