o
    ZӅi                     @  s   d dl mZ d dlmZmZmZ d dlZd dlZd dlZ	d dl
Z
d dlZddlmZmZ dZdd	d
Zd ddZd!ddZddd"ddZd#ddZdS )$    )annotations)AnyDictListN   )ZoneOperation	ParamSpecui_create_timesheet_entriesreturnList[ZoneOperation]c                   C  s   t tdd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ddidtddddtddddgdddgdd	dgS ) NzUI Create Timesheet entriesu   Crea entradas de timesheet usando UI automation (Playwright). Requiere storageState (bootstrap). Soporta rows opcional para definir filas dinámicas; si no se envía rows, el flujo usa filas por defecto.UIwriteF)timesheet_butimesheet_user_idtimesheet_user_nametimesheet_daterowsdry_runrawr   stringTz&Business Unit a seleccionar en AroFlo.r   u#   AroFlo User ID (preferido, único).r   z'Nombre completo del usuario (fallback).r   zFecha objetivo (YYYY-MM-DD).r   arrayzLista de filas (opcional). Cada item es un string con formato: 'hours=5;overhead=Admin Duties;worktype=NT;tracking=ADMIN;note=...'type)items_schemar   booleanz1Si true, no ejecuta UI; solo preview del comando.r   z4Si true, incluye stdout/stderr completos del runner.
timesheetszCrear overheads por UIu-   Inserción controlada cuando API es READ ONLYhigh)codelabeldescriptionhttp_methodside_effect
idempotentdefault_paramsparamscategory	use_cases
risk_levelrequires_confirmation)r   OP_UI_CREATEr    r)   r)   U/var/www/html/flask_server/apps/aroflo_connector_app/zones/timesheets/mu_ui_create.pyget_operations   sF   

r+   operation_codestrboolc                 C  s   | t kS )N)r(   )r,   r)   r)   r*   supportsA   s   r/   argv	List[str]Dict[str, Any]c                 C  s   dd| dS )NT
subprocess)r   
invocationr0   r)   )r0   r)   r)   r*   _previewE   s   r5   F)r   r   c                C  sz   t j| dddd}|r|j|j|j| dS |jpd  dd  }|jp&d  dd  }|jd|d|| dS )	NTF)capture_outputtextcheck)
returncodestdoutstderrr0    i
)r9   stdout_tailstderr_tailr0   )r3   runr9   r:   r;   strip
splitlinesjoin)r0   r   procout_tailerr_tailr)   r)   r*   _run_uiM   s   rG   clientr   r#   c                 C  s  t |dd}t |dd}t|dp|dpd }t|dp1|dp1td	p1d }|s9d
}|dpB|d}|sItd|dpR|d}|r[t| s_tdt|dpk|dpkd }	t|dp{|dp{d }
|	s|
std| tkr|dpg }|rt|t	std|t|t||	|
dd |D d}|rdd| d|dS t
jj| dt|dd d!id"d#}t
jj|d$d%}| d}W d    n1 sw   Y  d&|d|jd'S td(|  ))Nr   Fr   	tenant_idz	tenant-idr<   
worker_urlz
worker-urlAROFLO_UI_WORKER_URLzhttp://127.0.0.1:5010r   ztimesheet-datez)timesheet_date es requerido (YYYY-MM-DD).r   ztimesheet-buz:timesheet_bu es requerido (ej: 'Utility Solutions Group').r   ztimesheet-user-idr   ztimesheet-user-namezDDebes enviar timesheet_user_id o timesheet_user_name (al menos uno).r   z#rows debe ser una lista de strings.c                 S  s$   g | ]}t | rt | qS r)   )r-   rA   ).0rr)   r)   r*   
<listcomp>   s   $ zexecute.<locals>.<listcomp>)rI   r   r   r   r   r   Thttpz/ui/timesheets/create)r   r4   urlpayloadzutf-8zContent-Typezapplication/jsonPOST)dataheadersmethodx   )timeoutr   )r9   r:   r;   rP   u3   [Timesheets.mu_ui_create] Operación no soportada: )r.   getr-   rA   osgetenv
ValueErrorr(   
isinstancelisturllibrequestRequestjsondumpsencodeurlopenreaddecodefull_url)r,   rH   r#   r   r   rI   rJ   r   r   r   r   r   rQ   reqrespbodyr)   r)   r*   execute`   sZ    *  
	rk   )r
   r   )r,   r-   r
   r.   )r0   r1   r
   r2   )r0   r1   r   r.   r
   r2   )r,   r-   rH   r   r#   r2   r
   r   )
__future__r   typingr   r   r   ra   rY   urllib.requestr^   sysr3   baser   r   r(   r+   r/   r5   rG   rk   r)   r)   r)   r*   <module>   s    

1
