o
    di                     @  s   d dl mZ d dlmZmZmZmZmZ ddlm	Z	m
Z
 ddlmZmZmZmZmZ dZdZd	Zd
ZdZdddZdddZdddZdS )    )annotations)AnyDictListTupleOptional   )ZoneOperation	ParamSpec   )requestraw_wrapcoerce_page_sizecoerce_orderbuild_list_paramstrackingcenteridlist_trackingcentresget_trackingcentre!resolve_trackingcentre_id_by_nametrackingcentresreturnList[ZoneOperation]c                   C  s   t tdddddd d dd ddtd	d
ddtdd
ddtddddtddddtddddgdg ddddt tddt dddddditdd
ddtddddgddgdddt td d!ddddditd"d
dd#td$d
dd%tdddd&gd'd(gdddgS ))NzList Tracking Centresu|   Devuelve una lista paginada de tracking centres (zone=trackingcenter). Soporta WHERE opcional, ORDER opcional y paginación.GETreadTr   F)whereorderpagepageSizerawr   stringu)   Cláusula WHERE estilo AroFlo (opcional).r   z/Orden: campo|asc o campo|desc (AroFlo 'order').r   integeru   Número de página (1..N).r   u4   Cantidad de registros por página (AroFlo pageSize).r   booleanz/Si true, devuelve respuesta cruda + meta debug.trackingcenter)zListar tracking centresz%Filtrar tracking centres usando WHEREz%Ordenar tracking centres usando ORDERlow)codelabeldescriptionhttp_methodside_effect
idempotentdefault_paramsparamscategory	use_cases
risk_levelrequires_confirmationzGet Tracking Centreu   Obtiene un tracking centre específico por ID (zone=trackingcenter where=and|trackingcenterid|=|...). Campo ID actual configurado como: .r   z0TrackingCenterID codificado en AroFlo (ver doc).z.Consultar detalle de un tracking centre por IDz Resolve TrackingCentreID by NamezResuelve trackingcentreid a partir de un nombre EXACTO (where=and|name|=|...). Opcionalmente filtra por businessunit.orgid para desambiguar.nameuA   Nombre exacto del tracking centre (case-sensitive según AroFlo).orgidz9OrgID (business unit) para desambiguar si hay duplicados.u#   Si true, incluye meta/diagnóstico.r   u@   Mapear nombre → trackingcentreid para luego filtrar Timesheets)r	   OP_LISTr
   OP_GETID_FIELDOP_RESOLVE_ID r7   r7   R/var/www/html/flask_server/apps/aroflo_connector_app/zones/trackingcentres/base.pyget_operations   sx   r9   operation_codestrboolc                 C  s   | t tthv S )N)r3   r4   r6   )r:   r7   r7   r8   supportsh   s   r=   clientr   r+   Dict[str, Any]c                   sF  t |dd}t|}t|}| tkrB|d}t|dd}|dk r)tdtt|d |||d}t	|d|}	|r@t
|	|S |	S | tkrj|d	 }
d
t d|
 }dtfd|fdg}t	|d|}	|rht
|	|S |	S | tkrt|d  }|s}td|d t |dd}d| }dtfd|fdg}t	|d|}	|rt
|	|n|	}|r|d n|}t|tr|di ni }t|tr|dg ng } rԇ fdd|D }|std| d rd  d d t|dkrdd |D }td| |d }|d|d|dd }|r||d!< |S |S td"|  )#Nr   Fr   r   r   zpage debe ser >= 1.)zoner   joinr   r   r   r   r   zand|z|=|r@   )r   1r1   u   name no puede estar vacío.r2   zand|name|=|datazoneresponser   c                   s<   g | ]}t |trt |d tr|d  d kr|qS )businessunitr2   )
isinstancedictget.0xr2   r7   r8   
<listcomp>   s    zexecute.<locals>.<listcomp>u*   No se encontró tracking centre con name=''z
 y orgid=' c                 S  s*   g | ]}| d | d| ddqS )trackingcentreidr1   rE   rP   r1   rE   )rH   rI   r7   r7   r8   rM      s    uh   Nombre ambiguo: hay múltiples tracking centres con ese name. Pasa --orgid para desambiguar. Candidatos=r   rP   rE   rQ   resolvedu/   [TrackingCenter.base] Operación no soportada: )r<   rH   r   r   r3   int
ValueErrorr   API_ZONEr   r   r4   r5   r6   r;   striprF   rG   len)r:   r>   r+   r   r   r   r   r   params_listresptc_idr1   rC   payloadzritems
candidatesrK   rR   r7   rL   r8   executem   s|   





(r_   N)r   r   )r:   r;   r   r<   )r:   r;   r>   r   r+   r?   r   r   )
__future__r   typingr   r   r   r   r   baser	   r
   _join_utilsr   r   r   r   r   r5   r3   r4   r6   rU   r9   r=   r_   r7   r7   r7   r8   <module>   s   

N