o
    |gi"                     @  s   d dl mZ d dlZd dlmZmZmZmZmZ d dl	Z	dZ
d)d	d
Zd*ddZd+ddZd,ddZd-dd Zd.d#d$Zd/d'd(ZdS )0    )annotationsN)AnyDictListOptionalCallablezand|workdate|>|2001-01-01resultr   returnNonec                 C  s:   t | ttfrttj| ddd d S tt|  d S )N   F)indentensure_ascii)
isinstancedictlistclickechojsondumpsstr)r    r   L/var/www/html/flask_server/apps/aroflo_connector_app/zones/timesheets/cli.py_echo   s   r   zone	List[str]c                 C  s   t | dg }tdd |D S )N
operationsc                 S  s   g | ]}|j qS r   )code).0or   r   r   
<listcomp>   s    z"_available_ops.<locals>.<listcomp>)getattrsorted)r   opsr   r   r   _available_ops   s   r#   op_coder   paramsDict[str, Any]c                 C  sl   t t| }||vr/td| d| j d td t| D ]
}td|  q td| j||dS )Nu   ❌ Operación 'z' no existe en zona 'z'.zOperaciones disponibles:z  - r   )r%   )setr#   r   r   r   
SystemExitexecute)r   r$   r%   	availablecr   r   r   _run   s   
r,   confirmbooldry_runop_labelc                 C  s    |rd S | st d| dd S )Nu8   ❌ Falta --confirm. Operación de escritura cancelada (z).)r(   r-   r/   r0   r   r   r   _require_confirm_if_needed"   s
   r2   pagesizeOptional[int]orderOptional[str]c                C  s    |d ur|| d< |r|| d< | S )NpageSizer5   r   )r%   r3   r5   r   r   r   _add_optional)   s
   r8   fnCallable[..., Any]c                 C  sn   t jddtdd| } t jddddd| } t jd	d dd
d| } t jdtd dd| } t jddd| } | S )Nz--page   T)defaulttypeshow_defaultz--wherewhere_uA   Cláusula WHERE estilo AroFlo. Repetible: --where ... --where ...multiplehelpz--orderzEj: createdutc|desc)r<   r>   rB   
--pagesize)r=   r<   r>   --rawis_flag)r   optionint)r9   r   r   r   _common_list_options1   s   rI   rootclick.Groupc                   s  | j  jddd }|dtdi fdd}|dtjddddtjddddj fdd}|dtjddddtdk fd d!}|d"tjd#dd$tdl fd&d'}|d(tjd)d*dd$tdm fd+d,}|d-tjd.dd$tdn fd0d1}|d2tjddd3dtjd4d5dd6dtjd7d8dd6dtjd9d td:tjddd;d<do fd@dA}	|dBtjdCdd6dtjdDddEdtjdFdGdHdItjdJdGdKdItjdLdMddNdOtjdddPdQtjdRddSdQtjdTddUdQdp fd\d]}
|d^tjdDdd_dtjdFdGdHdItjdJdGdKdItjdCdd6dtjd`ddadQtjdbddcdQtjdddPdQtjdRddSdQtjdTddddQdq fdgdh}d S )rN)namec                   S  s   dS )z8Operaciones de la zona timesheets (READ + UI mutations).Nr   r   r   r   r   timesheets_groupD   s    z&register_cli.<locals>.timesheets_groupr   pagerH   r?   tuple[str, ...]r5   r6   r3   r4   rawr.   c                   s4   t | t|ptg|d||d}tt d| d S )N)rN   whererP   r3   r5   list_timesheetsr8   r   DEFAULT_WHEREr   r,   )rN   r?   r5   r3   rP   r%   r   r   r   list_cmdH   s    zregister_cli.<locals>.list_cmdgetz--timesheetidTzTimesheetID (AroFlo).)requiredrB   rD   rE   timesheetidr   c                   s   t t d| |d d S )Nget_timesheetrZ   rP   r   r,   r\   rV   r   r   get_cmdN   s   zregister_cli.<locals>.get_cmdzby-userz--useridzUserID (AroFlo).useridc                   6   t | |t|p	tg|d||d}tt d| d S )N)r_   rN   rQ   rP   rR   get_timesheets_by_userrT   )r_   rN   r?   r5   r3   rP   r%   rV   r   r   by_user_cmdT   s   "z!register_cli.<locals>.by_user_cmdzby-taskz--taskid)rY   taskidc                   r`   )N)rc   rN   rQ   rP   rR   get_timesheets_by_taskrT   )rc   rN   r?   r5   r3   rP   r%   rV   r   r   by_task_cmd[   
   z!register_cli.<locals>.by_task_cmdzby-typez--typetype_c                   r`   )N)r=   rN   rQ   rP   rR   get_timesheets_by_typerT   )rg   rN   r?   r5   r3   rP   r%   rV   r   r   by_type_cmdf   rf   z!register_cli.<locals>.by_type_cmdzafter-workdatez
--workdateworkdatec                   r`   )N)rj   rN   rQ   rP   rR   get_timesheets_after_workdaterT   )rj   rN   r?   r5   r3   rP   r%   rV   r   r   after_workdate_cmdq   rf   z(register_cli.<locals>.after_workdate_cmdzby-user-rangezUserID AroFloz--from-date	from_datez
YYYY-MM-DDz	--to-dateto_daterC   )r<   r=   F)rF   r<   
int | Noner	   r
   c                   s$   | ||||d}t t d| d S )N)r_   rm   rn   r7   rP   get_timesheets_by_user_ranger]   )r_   rm   rn   r3   rP   r%   rV   r   r   by_user_range_cmd{   s   z'register_cli.<locals>.by_user_range_cmd	ui-createz--timesheet-datez--timesheet-buz,Business Unit name (e.g. Telecommunications)z--timesheet-user-id zGTimesheet UI user_id (numeric) OR API userid if your runner resolves it)r<   rB   z--timesheet-user-namez4User name as shown in Timesheets dropdown (fallback)z--rowrows_zeFila a crear. Repetible. Formato: hours=5;overhead=Admin Duties;worktype=NT;tracking=ADMIN;note=textor@   z!Devuelve stdout/stderr completos.)rF   rB   z	--dry-runz"No ejecuta UI; muestra el comando.z	--confirmz1Confirmo que deseo CREAR entries (UI automation).timesheet_butimesheet_user_idtimesheet_user_nametimesheet_dater/   r-   c           	        s:   t ||dd | |||t|||d}tt d| d S )Nrr   r1   )ru   rv   rw   rx   rowsrP   r/   ui_create_timesheet_entries)r2   r   r   r,   )	ru   rv   rw   rx   rt   rP   r/   r-   r%   rV   r   r   ui_create_cmd   s   	z#register_cli.<locals>.ui_create_cmd	ui-deletezBusiness Unit namez--delete-allz"Borra TODO en la fecha (hours->0).z--include-protectedz1Incluye filas protegidas (solo con --delete-all).z2Confirmo que deseo BORRAR entries (UI automation).
delete_allinclude_protectedc	           
   	     s8   t ||dd | |||||||d}	tt d|	 d S )Nr|   r1   )ru   rv   rw   rx   r}   r~   rP   r/   ui_delete_timesheet_entries)r2   r   r,   )
ru   rv   rw   rx   r}   r~   rP   r/   r-   r%   rV   r   r   ui_delete_cmd   s   
z#register_cli.<locals>.ui_delete_cmd)
rN   rH   r?   rO   r5   r6   r3   r4   rP   r.   )rZ   r   rP   r.   )r_   r   rN   rH   r?   rO   r5   r6   r3   r4   rP   r.   )rc   r   rN   rH   r?   rO   )rg   r   rN   rH   r?   rO   )rj   r   rN   rH   r?   rO   )r_   r   rm   r   rn   r   r3   ro   rP   r.   r	   r
   )ru   r   rv   r   rw   r   rx   r   rt   rO   rP   r.   r/   r.   r-   r.   )ru   r   rv   r   rw   r   rx   r   r}   r.   r~   r.   rP   r.   r/   r.   r-   r.   )groupr   commandrI   r   rG   rH   )rJ   r   rM   rW   r^   rb   re   ri   rl   rq   r{   r   r   rV   r   register_cliC   st   
 &r   )r   r   r	   r
   )r   r   r	   r   )r   r   r$   r   r%   r&   r	   r   )r-   r.   r/   r.   r0   r   r	   r
   )r%   r&   r3   r4   r5   r6   r	   r&   )r9   r:   r	   r:   )rJ   rK   r   r   r	   r
   )
__future__r   r   typingr   r   r   r   r   r   rU   r   r#   r,   r2   r8   rI   r   r   r   r   r   <module>   s   






