o
    is                     @   s   d dl mZmZ d dlZd dlZd dlm  mZ	 dZ
dZdedeeef fddZdedeeef fd	d
Zdedeeef fddZdS )    )DictAnyNz$cddfe15b-c8e1-4132-bff8-d1501b9c16b9zMhttps://abr.business.gov.au/abrxmlsearch/AbrXmlSearch.asmx/SearchByABNv202001abnreturnc                    s  |  dd } |  si S | dtd}tj|d}z&tjj	t
|d}tjj|dd}| }W d	   n1 s=w   Y  W n tyN   i  Y S w zt| W n tya   i  Y S w d
tdtd	B f fdd}|d}|swi S |dp|dp|d}|dp|d}	|d}
|d}|d}|d}|d}d	}|s|rddd ||fD }|d}|d}d	}|s|rddd ||fD }|d}|d}t|o|pd d k}|||	|
|||||||d!d"	S )#u   
    Consulta directa al servicio ABN Lookup (SearchByABNv202001)
    y devuelve un dict con los datos más importantes en formato 'raw'.

    Si no se encuentra el ABN o hay error, devuelve {}.
      N)searchStringincludeHistoricalDetailsauthenticationGuidzutf-8)data
   )timeoutNpathr   c                    s&     | }|dur|jr|j S dS )uf   
        Busca un tag usando namespace comodín, por ejemplo:
        ".//{*}identifierValue"
        N)findtextstrip)r   elemroot 6/var/www/html/flask_server/apps/abn_lookup_app/core.py	find_text/   s   

z!_fetch_abn_raw.<locals>.find_textz.//{*}ABN/{*}identifierValuez".//{*}mainName/{*}organisationNamez.//{*}legalName/{*}fullNamez&.//{*}businessName/{*}organisationNamez%.//{*}entityType/{*}entityDescriptionz".//{*}entityType/{*}entityTypeCodez&.//{*}entityStatus/{*}entityStatusCodez#.//{*}entityStatus/{*}effectiveFromz.//{*}recordLastUpdatedDatez..//{*}mainBusinessPhysicalAddress/{*}stateCodez-.//{*}mainBusinessPhysicalAddress/{*}postcodec                 s       | ]}|r|V  qd S Nr   .0partr   r   r   	<genexpr>Y       
z!_fetch_abn_raw.<locals>.<genexpr>z,.//{*}mainBusinessPostalAddress/{*}stateCodez+.//{*}mainBusinessPostalAddress/{*}postcodec                 s   r   r   r   r   r   r   r   r   b   r   z*.//{*}goodsAndServicesTax/{*}effectiveFromz(.//{*}goodsAndServicesTax/{*}effectiveToz
0001-01-01)
registeredfromto)	r   entity_nameentity_typestatusstatus_fromlast_updatedphysical_addresspostal_addressgst)replacer   isdigitABN_LOOKUP_GUIDurllibparse	urlencodeencoderequestRequestABN_LOOKUP_URLurlopenread	ExceptionET
fromstringstrjoinbool)r   paramsr   reqresponse	xml_bytesr   	abn_valuer#   r$   r%   r&   r'   physical_statephysical_postcoder(   postal_statepostal_postcoder)   gst_effective_fromgst_effective_togst_registeredr   r   r   _fetch_abn_raw   s   



rI   c                 C   sz   t | }|sdddd| ddddd	S |dpd	 }|d
p!i }dddd|dp,| d|dkt|d|dd	S )ug   
    Versión 0 (básica) del lookup de ABN para Australia.
    Esta es la que usará wp_invoices.
    
abn_lookupr   AUABNFN)	serviceversioncountrytax_id_typetax_id
abn_exists	is_activerH   r#   r%   r   r*   r   Tactiver    r#   )rI   getlowerr<   )r   rawr%   gst_infor   r   r   lookup_abn_basic   s0   rY   c                 C   s   t | }|sd| dddddddddddS |dpi }d|dp#| |d|d|d	|d
|d|d|dt|d|d|ddS )u   
    Versión 'full' pensada para consola u otras apps (más detalles).
    No la necesita wp_invoices v0, pero la usamos para --full en el CLI.
    FN)rR   r   r#   r$   r%   r&   r'   r(   r)   rH   gst_fromgst_tor*   Tr   r#   r$   r%   r&   r'   r(   r)   r    r!   r"   )rI   rU   r<   )r   rW   rX   r   r   r   lookup_abn_full   s:   r\   )typingr   r   urllib.requestr.   urllib.parsexml.etree.ElementTreeetreeElementTreer8   r-   r4   r:   rI   rY   r\   r   r   r   r   <module>   s   t$