o
    Pgi!                     @  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m	Z	m
Z
 dZdZdd
dZdddZd ddZd!ddZd"ddZdS )#    )annotations)AnyDictListN   )ZoneOperation	ParamSpecui_create_timesheet_entriesui_delete_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t td 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$td%dd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_confirmationzUI Delete Timesheet entrieszbElimina entradas (hours -> 0 + save) usando UI automation. Soporta delete_all e include_protected.)r   r   r   r   
delete_allinclude_protectedr   r   r)   z"Borra TODO en la fecha (hours->0).r*   z/Incluye filas protegidas (solo con delete_all).zBorrar overheads por UIu%   Limpieza de días antes de reinsertar)r   OP_UI_CREATEr   OP_UI_DELETE r-   r-   R/var/www/html/flask_server/apps/aroflo_connector_app/zones/timesheets/mutations.pyget_operations   s   
1r/   operation_codestrboolc                 C  s   | t thv S )N)r+   r,   )r0   r-   r-   r.   supportso   s   r3   argv	List[str]Dict[str, Any]c                 C  s   dd| dS )NT
subprocess)r   
invocationr4   r-   )r4   r-   r-   r.   _previews   s   r9   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 )
z}
    Ejecuta el runner de UI automation como subprocess para aislar Playwright
    del runtime principal de la app/zona.
    TF)capture_outputtextcheck)
returncodestdoutstderrr4    iN
)r=   stdout_tailstderr_tailr4   )r7   runr=   r>   r?   strip
splitlinesjoin)r4   r   procout_tailerr_tailr-   r-   r.   _run_ui{   s&   rK   clientr$   c                 C  s  t |dd}t |dd}|dp|d}|s td|dp)|d}|r2t| s6td	t|d
pB|dpBd }t|dpR|dpRd }|s^|s^tdtjdddt|dt|g}	|rv|	d|g n|	d|g | tkrt	|	}
|dpg }|rt
|t	std|D ]}t| }|r|
d|g q|
d |rt|
S t|
|dS | tkrt	|	}
t |ddr|
d t |ddr|
d |
d |rt|
S t|
|dS td |  )!Nr   Fr   r   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@   r   ztimesheet-user-namezDDebes enviar timesheet_user_id o timesheet_user_name (al menos uno).z-mz.apps.aroflo_connector_app.ui_automation.runnerz--timesheet-datez--timesheet-buz--timesheet-user-idz--timesheet-user-namer   z#rows debe ser una lista de strings.z--rowztimesheet-create)r   r)   z--delete-allr*   z--include-protectedztimesheet-deleteu0   [Timesheets.mutations] Operación no soportada: )r2   get
ValueErrorr1   rE   sys
executableextendr+   list
isinstanceappendr9   rK   r,   )r0   rL   r$   r   r   r   r   r   r   base_cmdr4   r   rsr-   r-   r.   execute   sb     




rX   )r   r   )r0   r1   r   r2   )r4   r5   r   r6   )r4   r5   r   r2   r   r   )r0   r1   rL   r   r$   r6   r   r   )
__future__r   typingr   r   r   rO   r7   baser   r   r+   r,   r/   r3   r9   rK   rX   r-   r-   r-   r.   <module>   s   

]

