§
    ÔŸ’j;#  ã                  óF   — d dl mZ 	 d dlmZ 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddd„ZdS )é    )Úannotations)ÚAnyNÚ	directionú
str | NoneÚstatusÚsearchÚ	from_dateÚto_dateÚreconciliation_statusÚ
project_idÚvat_rateÚ
min_amountúfloat | NoneÚ
max_amountÚsignature_validúbool | NoneÚinvoice_seriesÚinvoice_type_filterÚcategoryÚreturnútuple[str, list[Any]]c                ó„  — dg}g }| r*|                      d¦  «         |                      | ¦  «         |r*|                      d¦  «         |                      |¦  «         |r*|                      d¦  «         |                      |¦  «         |r*|                      d¦  «         |                      |¦  «         |r*|                      d¦  «         |                      |¦  «         |r*|                      d¦  «         |                      |¦  «         |r·t          |¦  «                             ¦   «         dv r|                      d	¦  «         n~	 t          t          |¦  «                             d
d¦  «                             ¦   «         ¦  «        }|                      d¦  «         |                      |¦  «         n# t          $ r Y nw xY w|�0|dk    r*|                      d¦  «         |                      |¦  «         |	�0|	dk    r*|                      d¦  «         |                      |	¦  «         |
�*|                      d¦  «         |                      |
¦  «         |r@|                      d¦  «         |                      d
|                     ¦   «         › d
�¦  «         |r3|dv r|                      d¦  «         n|dv r|                      d¦  «         |r“|dk    r�|                     ¦   «                              ¦   «         }|dv r|                      d¦  «         nM|dv r|                      d¦  «         n3|dv r|                      d¦  «         n|dv r|                      d¦  «         |rFd
|                     ¦   «         › d
�}|                      d¦  «         |                     |gd z  ¦  «         d!                     |¦  «        |fS )"Nz1=1zi.direction = %szi.status = %szi.reconciliation_status = %szi.matched_project_id = %szi.issue_date >= %szi.issue_date <= %s)ÚkctÚnonez0-vatzQ(i.vat_amount_vnd = 0 AND (i.vat_rate_percent = 0 OR i.vat_rate_percent IS NULL))ú%Ú zi.vat_rate_percent = %sr   zi.total_amount_vnd >= %szi.total_amount_vnd <= %szi.signature_valid = %szi.invoice_series ILIKE %s)Úcash_registerÚmttzÂ(i.invoice_series ILIKE 'K%%' OR i.invoice_series ILIKE '1K%%' OR i.invoice_series ILIKE '2K%%' OR i.invoice_series ILIKE 'M%%' OR i.invoice_series ILIKE '1M%%' OR i.invoice_series ILIKE '2M%%'))ÚstandardÚstandard_vatzß(i.invoice_series NOT ILIKE 'K%%' AND i.invoice_series NOT ILIKE '1K%%' AND i.invoice_series NOT ILIKE '2K%%' AND i.invoice_series NOT ILIKE 'M%%' AND i.invoice_series NOT ILIKE '1M%%' AND i.invoice_series NOT ILIKE '2M%%')Úall)Ú	machineryÚ	equipmentÚthiet_biÚmay_mocu+  (
                EXISTS (
                    SELECT 1 FROM erp_invoice_items itm
                    WHERE itm.invoice_id = i.id AND (
                        itm.item_name ILIKE '%%mÃ¡y%%' OR itm.item_name ILIKE '%%Ä‘Ã o%%' OR itm.item_name ILIKE '%%xÃºc%%' OR
                        itm.item_name ILIKE '%%táº£i%%' OR itm.item_name ILIKE '%%ben%%' OR itm.item_name ILIKE '%%hÃ n%%' OR
                        itm.item_name ILIKE '%%khoan%%' OR itm.item_name ILIKE '%%cáº¯t%%' OR itm.item_name ILIKE '%%Ä‘áº§m%%' OR
                        itm.item_name ILIKE '%%nÃ©n khÃ­%%' OR itm.item_name ILIKE '%%phÃ¡t Ä‘iá»‡n%%' OR itm.item_name ILIKE '%%uá»‘n sáº¯t%%' OR
                        itm.item_name ILIKE '%%volvo%%' OR itm.item_name ILIKE '%%komatsu%%' OR itm.item_name ILIKE '%%thaco%%' OR
                        itm.item_name ILIKE '%%howo%%' OR itm.item_name ILIKE '%%bosch%%' OR itm.item_name ILIKE '%%makita%%' OR
                        itm.item_name ILIKE '%%mikasa%%' OR itm.item_name ILIKE '%%jasic%%' OR itm.item_name ILIKE '%%riland%%' OR
                        itm.item_name ILIKE '%%conmec%%' OR itm.item_name ILIKE '%%denyo%%' OR itm.item_name ILIKE '%%ebara%%'
                    )
                ) OR
                EXISTS (
                    SELECT 1 FROM erp_equipment eq
                    WHERE eq.purchase_invoice_id = i.id OR eq.source_invoice_id = i.id
                ) OR
                (
                    i.seller_name ILIKE '%%MÃ�Y CÃ”NG TRÃŒNH%%' OR i.seller_name ILIKE '%%THACO%%' OR
                    i.seller_name ILIKE '%%THIÃŠN KHANG%%' OR i.seller_name ILIKE '%%VELTECH%%' OR
                    i.seller_name ILIKE '%%EMC VIá»†T NAM%%' OR i.seller_name ILIKE '%%Ä�á»¨C ANH%%' OR
                    i.seller_name ILIKE '%%THIáº¾T Bá»Š Ä�Iá»†N Háº¢I PHÃ’NG%%' OR i.notes ILIKE '%%mÃ¡y%%' OR
                    i.notes ILIKE '%%Ä‘Ã o%%' OR i.notes ILIKE '%%xe táº£i%%' OR i.notes ILIKE '%%hÃ n%%' OR
                    i.notes ILIKE '%%khoan%%' OR i.notes ILIKE '%%cáº¯t%%' OR i.notes ILIKE '%%Ä‘áº§m%%'
                )
            ))Ú	materialsÚvat_tuul  (
                EXISTS (
                    SELECT 1 FROM erp_invoice_items itm
                    WHERE itm.invoice_id = i.id AND (
                        itm.item_name ILIKE '%%thÃ©p%%' OR itm.item_name ILIKE '%%sáº¯t%%' OR itm.item_name ILIKE '%%xi mÄƒng%%' OR
                        itm.item_name ILIKE '%%cÃ¡t%%' OR itm.item_name ILIKE '%%Ä‘Ã¡%%' OR itm.item_name ILIKE '%%bÃª tÃ´ng%%' OR
                        itm.item_name ILIKE '%%gáº¡ch%%' OR itm.item_name ILIKE '%%á»‘ng%%' OR itm.item_name ILIKE '%%sÆ¡n%%' OR
                        itm.item_name ILIKE '%%inox%%' OR itm.item_name ILIKE '%%tÃ´n%%' OR itm.item_name ILIKE '%%cá»�c%%'
                    )
                ) OR
                (
                    i.seller_name ILIKE '%%HÃ’A PHÃ�T%%' OR i.seller_name ILIKE '%%CHINFON%%' OR
                    i.seller_name ILIKE '%%BÃ�CH VÃ‚N%%' OR i.seller_name ILIKE '%%LÃ‚M CÆ¯á»œNG%%' OR
                    i.seller_name ILIKE '%%Ä�áº I VÅ¨%%' OR i.seller_name ILIKE '%%THÃ‰P%%' OR
                    i.seller_name ILIKE '%%BÃŠ TÃ”NG%%' OR i.seller_name ILIKE '%%Gáº CH%%'
                )
            ))ÚfuelÚxang_dauuá  (
                EXISTS (
                    SELECT 1 FROM erp_invoice_items itm
                    WHERE itm.invoice_id = i.id AND (
                        itm.item_name ILIKE '%%xÄƒng%%' OR itm.item_name ILIKE '%%dáº§u%%' OR itm.item_name ILIKE '%%diesel%%' OR
                        itm.item_name ILIKE '%%do 0.05%%' OR itm.item_name ILIKE '%%ron 95%%' OR itm.item_name ILIKE '%%nhá»›t%%'
                    )
                ) OR
                (
                    i.seller_name ILIKE '%%PETROLIMEX%%' OR i.seller_name ILIKE '%%PVOIL%%' OR
                    i.seller_name ILIKE '%%XÄ‚NG Dáº¦U%%' OR i.seller_name ILIKE '%%HFC%%' OR
                    i.seller_name ILIKE '%%HOÃ€NG PHÃšC%%'
                )
            ))ÚservicesÚdich_vuu  (
                EXISTS (
                    SELECT 1 FROM erp_invoice_items itm
                    WHERE itm.invoice_id = i.id AND (
                        itm.item_name ILIKE '%%thi cÃ´ng%%' OR itm.item_name ILIKE '%%thuÃª ca%%' OR itm.item_name ILIKE '%%bá»‘c xÃºc%%' OR
                        itm.item_name ILIKE '%%váº­n chuyá»ƒn%%' OR itm.item_name ILIKE '%%tÆ° váº¥n%%' OR itm.item_name ILIKE '%%thÃ­ nghiá»‡m%%' OR
                        itm.item_name ILIKE '%%nhÃ¢n cÃ´ng%%'
                    )
                ) OR
                (
                    i.seller_name ILIKE '%%Váº¬N Táº¢I%%' OR i.seller_name ILIKE '%%TÆ¯ Váº¤N%%' OR
                    i.seller_name ILIKE '%%THÃ� NGHIá»†M%%' OR i.seller_name ILIKE '%%Dá»ŠCH Vá»¤%%'
                )
            )aF  (
            i.invoice_number ILIKE %s OR
            i.invoice_series ILIKE %s OR
            i.seller_name ILIKE %s OR
            i.buyer_name ILIKE %s OR
            i.seller_tax_code ILIKE %s OR
            i.buyer_tax_code ILIKE %s OR
            p.project_name ILIKE %s OR
            p.project_code ILIKE %s
        )é   z AND )	ÚappendÚstrÚlowerÚfloatÚreplaceÚstripÚ	ExceptionÚextendÚjoin)r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   Úwhere_clausesÚparamsÚvnumÚ	cat_lowerÚsearch_likes                      úCC:\Projects\DSCons\app\services\invoice_processing\query_builder.pyÚbuild_list_invoices_filtersr<   	   s‰  € ð  �G€MØ€Fàð !Ø×ÒÐ/Ñ0Ô0Ð0Ø�Š�iÑ Ô Ð Øð Ø×Ò˜_Ñ-Ô-Ð-Ø�Š�fÑÔÐØð -Ø×ÒÐ;Ñ<Ô<Ð<Ø�ŠÐ+Ñ,Ô,Ð,Øð "Ø×ÒÐ8Ñ9Ô9Ð9Ø�Š�jÑ!Ô!Ð!Øð !Ø×ÒÐ1Ñ2Ô2Ð2Ø�Š�iÑ Ô Ð Øð Ø×ÒÐ1Ñ2Ô2Ð2Ø�Š�gÑÔÐØð Ýˆx‰=Œ=×ÒÑ Ô Ð$<Ð<Ð<Ø× Ò Øcñô ð ð ðÝ�S ™]œ]×2Ò2°3¸Ñ;Ô;×AÒAÑCÔCÑDÔD�Ø×$Ò$Ð%>Ñ?Ô?Ð?Ø—’˜dÑ#Ô#Ð#Ð#øÝð ð ð Ø�ðøøøàÐ *¨q¢. .Ø×ÒÐ7Ñ8Ô8Ð8Ø�Š�jÑ!Ô!Ð!ØÐ *¨q¢. .Ø×ÒÐ7Ñ8Ô8Ð8Ø�Š�jÑ!Ô!Ð!ØÐ"Ø×ÒÐ5Ñ6Ô6Ð6Ø�Š�oÑ&Ô&Ð&Øð 5Ø×ÒÐ8Ñ9Ô9Ð9Ø�ŠÐ3˜.×.Ò.Ñ0Ô0Ð3Ð3Ð3Ñ4Ô4Ð4Øð ØÐ":Ð:Ð:Ø× Ò ð Uñô ð ð ð !Ð$@Ð@Ð@Ø× Ò ð rñô ð ð ð M�H Ò%Ð%Ø—N’NÑ$Ô$×*Ò*Ñ,Ô,ˆ	ØÐIÐIÐIØ× Ò ð "ñ ô ð ð ð6 Ð1Ð1Ð1Ø× Ò ð "ñ ô ð ð ð" Ð.Ð.Ð.Ø× Ò ð "ñ ô ð ð ð Ð1Ð1Ð1Ø× Ò ð "ñ ô ð ð ð )Ø+˜&Ÿ,š,™.œ.Ð+Ð+Ð+ˆØ×Òð 	ñ 		ô 		ð 		ð 	�Š�{�m aÑ'Ñ(Ô(Ð(à�<Š<˜Ñ&Ô&¨Ð.Ð.s   Å
A,F7 Æ7
GÇG)NNNNNNNNNNNNNN)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   )Ú
__future__r   Útypingr   r<   © ó    r;   ú<module>rA      s„   ðØ "Ð "Ð "Ð "Ð "Ð "à >ð Ð Ð Ð Ð Ð ð !ØØØ ØØ(,Ø!ØØ#Ø#Ø#'Ø!%Ø&*Øðd/ð d/ð d/ð d/ð d/ð d/ð d/r@   