o
    B_i?8                     @  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|createdutc|>|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   G/var/www/html/flask_server/apps/aroflo_connector_app/zones/tasks/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,   pagesizeOptional[int]orderOptional[str]c                C  s    |dur|| d< |r|| d< | S )uQ   
    AroFlo usa pageSize como parámetro de entrada para tamaño de página.
    NpageSizer/   r   )r%   r-   r/   r   r   r   _add_optional$   s
   	r2   fnCallable[..., Any]c                 C  sr   t jddtdd| } t jdtddd| } t jdd	dd
d| } t jdtd	ddd| } t jdddd| } | S )zi
    Decorador para opciones comunes de list/join:
    - page, where, order, pageSize (AroFlo) y raw
    --page   Tdefaulttypeshow_default--whereu   Cláusula WHERE estilo AroFlo.r8   r:   help--orderN(ORDER estilo AroFlo. Ej: createdutc|desc
--pagesizeuC   Cantidad de registros por página (AroFlo pageSize). Ej: 5, 20, 50.r9   r8   r:   r=   --raw&Devuelve respuesta cruda + meta debug.is_flagr=   )r   optionintDEFAULT_WHERE)r3   r   r   r   _common_list_options6   s   rI   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(   rJ   rL   rM   r   r   r   _require_confirm_if_neededK   s
   rO   rootclick.Groupc                   s$  | j jddd   dtdƇfdd} dtjddddtjdddddǇfdd} dtjdddddtjd dd!dtjd"dd!dtjd#d d$d%tjd&d dd'd(tjd)d*tdd+tjd,td dd-d.tjdddddȇfd2d3} d4tjd5d6d d7d8tjd9dd:dtjd;dd<dtjd=dd>dtjd?d6d d@d8tjdAd6d dBd8tjddddtjdCddDdtjdEddFddɇfdOdP} dQtjdddRdtjdSd6d dTd8tjd=d6d dUd8tjddddtjdCddDdtjdEddVddʇfdXdY} dZtjddd[dtjd\dd]dtjd^d_d d`d%tjdaddbdtjddddtjdCddDdtjdEddcddˇfdfdg} dhtjddd[dtjdiddjdtjdkd dld%tjdmtd dndotjdptd dqdotjdrd dsd%tjdttd dudotjddddtjdCddDdtjdEddvdḋfd~d} dtjdddddtjddddtjdCddDdtjdEdddd͇fdd}	 dtjddd[dtjdSdddtjddddtjddddtjdCddDdtjdEdddd·fdd}
dχ fdd}|ddd |ddd |ddd |ddd |ddd |ddd |ddd |ddd |ddd |ddd |ddd |ddd |ddd |ddd |ddd |dddŃ d S )N)namec                   S  s   dS )zOperaciones de la zona tasks.Nr   r   r   r   r   tasks_groupS   s    z!register_cli.<locals>.tasks_groupr   pagerG   wherer   r/   r0   r-   r.   rawrK   c                   s*   t | ||d||d}tt d| d S )NrT   rU   rV   r-   r/   
list_tasksr2   r   r,   rT   rU   r/   r-   rV   r%   r   r   r   list_cmdZ   s   	
zregister_cli.<locals>.list_cmdgetz--taskidTzTaskID codificado (AroFlo).)requiredr=   rB   rC   rD   taskidc                   s   t t d| |d d S )Nget_taskr`   rV   )r   r,   rb   r\   r   r   get_cmdj   s   zregister_cli.<locals>.get_cmdz	due-rangez--daterangetypeDueDate)r_   r8   r:   z
--fromdatez
YYYY-MM-DDz--todater;   zWHERE adicional (opcional).)r8   r=   r>   r?   r<   r5   r6   r7   r@   u4   Cantidad de registros por página (AroFlo pageSize).rA   daterangetypefromdatetodatec           	        s6   | ||||||d}t |||d}tt d| d S )N)re   rf   rg   rU   r/   rT   rV   rX   get_tasks_due_for_date_rangerZ   )	re   rf   rg   rU   r/   rT   r-   rV   r%   r\   r   r   due_range_cmdp   s   	z#register_cli.<locals>.due_range_cmdcreatez--orgidFz!OrgID (si aplica para tu tenant).)r_   r8   r=   z
--clientidzClientID (AroFlo).z--tasktypeidzTaskTypeID (AroFlo).z	--summaryu   Resumen / título de la task.z	--duedateu(   YYYY/MM/DD o YYYY-MM-DD (según AroFlo).z--descriptionu   Descripción (opcional).z	--dry-runz2No ejecuta POST; muestra preview (postxml/params).z	--confirmz.Confirmo que deseo CREAR una task (escritura).orgidclientid
tasktypeidsummaryduedatedescriptionrL   rJ   c	           
        sV   t ||dd |||||d}	| r| |	d< |r||	d< |r!||	d< tt d|	 d S )Nrj   rN   )rl   rm   rn   rV   rL   rk   ro   rp   create_taskrO   r   r,   )
rk   rl   rm   rn   ro   rp   rV   rL   rJ   r%   r\   r   r   
create_cmd   s   z register_cli.<locals>.create_cmdupdatezTaskID (AroFlo).z--statusz3Nuevo status (quote, notstarted, inprogress, etc.).u   Nuevo resumen / título.z3Confirmo que deseo ACTUALIZAR una task (escritura).statusc                   sN   t ||dd | ||d}|d ur||d< |d ur||d< tt d| d S )Nrt   rN   )r`   rV   rL   ru   rn   update_taskrr   )r`   ru   rn   rV   rL   rJ   r%   r\   r   r   
update_cmd   s   z register_cli.<locals>.update_cmdadd-notezTaskID destino (AroFlo).z	--contentz$Contenido de la nota (HTML o texto).z--filterfilter_z0Filtro (ej: internal admin only, internal only).z--stickyzMarca la nota como sticky.z1Confirmo que deseo INSERTAR una nota (escritura).contentstickyc                   s:   t ||dd | |||dg||d}tt d| d S )Nrx   rN   )rz   filterr{   )r`   notesrV   rL   insert_task_notesrr   )r`   rz   ry   r{   rV   rL   rJ   r%   r\   r   r   add_note_cmd   s   	z"register_cli.<locals>.add_note_cmdadd-materialz--itemzNombre del item/material.z--partnumberzPartnumber (opcional).z--costzCosto unitario (opcional).)r9   r8   r=   z--sellz!Precio venta unitario (opcional).z
--dateusedzFecha usada (YYYY/MM/DD).z
--quantityzCantidad (opcional).z1Confirmo que deseo INSERTAR material (escritura).item
partnumbercostOptional[float]selldateusedquantityc
                   s   t |	|dd d|i}
|r||
d< |d ur||
d< |d ur!||
d< |r'||
d< |d ur/||
d< | |
g||d	}tt d
| d S )Nr   rN   r   r   r   r   r   r   )r`   	materialsrV   rL   insert_task_adhoc_materialsrr   )r`   r   r   r   r   r   r   rV   rL   rJ   materialr%   r\   r   r   add_material_cmd   s   z&register_cli.<locals>.add_material_cmdmark-processedz$Repetible. Ej: --taskid X --taskid Y)multipler_   r=   z9Confirmo que deseo marcar linkprocessed=true (escritura).tuple[str, ...]c                   s2   t ||dd t| ||d}tt d| d S )Nr   rN   )taskidsrV   rL   mark_task_linkprocessed)rO   r   r   r,   )r`   rV   rL   rJ   r%   r\   r   r   mark_processed_cmd  s   z(register_cli.<locals>.mark_processed_cmdupdate-substatuszStatus (ej: pending).z--substatusidzSubstatusID.z4Confirmo que deseo actualizar substatus (escritura).substatusidc                   s2   t ||dd | ||||d}tt d| d S )Nr   rN   )r`   ru   r   rV   rL   update_task_substatusrr   )r`   ru   r   rV   rL   rJ   r%   r\   r   r   update_substatus_cmd  s   z*register_cli.<locals>.update_substatus_cmdcmd_namer$   	help_textr	   r
   c                   s&   j | |dtd fdd}d S )N)r=   rT   rG   rU   r   r/   r0   r-   r.   rV   rK   c                   s*   t | ||d||d}tt | d S )NrW   rX   rZ   r[   )r$   r   r   r   _cmd   s   	z4register_cli.<locals>.add_join_command.<locals>._cmd
rT   rG   rU   r   r/   r0   r-   r.   rV   rK   )commandrI   )r   r$   r   r   rS   r   )r$   r   add_join_command  s   z&register_cli.<locals>.add_join_commandassetsget_tasks_with_assetszTasks + join=assetsassignedhistoryget_tasks_with_assignedhistoryzTasks + join=assignedhistorycustomfieldsget_tasks_with_customfieldszTasks + join=customfieldsdocumentsandphotos!get_tasks_with_documentsandphotoszTasks + join=documentsandphotosexpenseget_tasks_with_expensezTasks + join=expenselabourget_tasks_with_labourzTasks + join=labourr   get_tasks_with_materialzTasks + join=materialr}   get_tasks_with_noteszTasks + join=notespurchaseordersget_tasks_with_purchaseorderszTasks + join=purchaseordersquoteget_tasks_with_quotezTasks + join=quote
tasktotalsget_tasks_with_tasktotalszTasks + join=tasktotalslocationget_tasks_with_locationzTasks + join=locationlocationcustomfields#get_tasks_with_locationcustomfieldsz!Tasks + join=locationcustomfieldsprojectget_tasks_with_projectzTasks + join=projectsalespersonget_tasks_with_salespersonzTasks + join=salesperson	substatusget_tasks_with_substatuszTasks + join=substatusr   )r`   r   rV   rK   )re   r   rf   r   rg   r   rU   r0   r/   r0   rT   rG   r-   r.   rV   rK   )rk   r0   rl   r   rm   r   rn   r   ro   r0   rp   r0   rV   rK   rL   rK   rJ   rK   )r`   r   ru   r0   rn   r0   rV   rK   rL   rK   rJ   rK   )r`   r   rz   r   ry   r0   r{   rK   rV   rK   rL   rK   rJ   rK   )r`   r   r   r   r   r0   r   r   r   r   r   r0   r   r   rV   rK   rL   rK   rJ   rK   )r`   r   rV   rK   rL   rK   rJ   rK   )r`   r   ru   r   r   r   rV   rK   rL   rK   rJ   rK   )r   r   r$   r   r   r   r	   r
   )groupr   r   rI   r   rF   rG   float)rP   r   r]   rc   ri   rs   rw   r   r   r   r   r   r   r   r   register_cliR   s   
 "$r   )r   r   r	   r
   )r   r   r	   r   )r   r   r$   r   r%   r&   r	   r   )r%   r&   r-   r.   r/   r0   r	   r&   )r3   r4   r	   r4   )rJ   rK   rL   rK   rM   r   r	   r
   )rP   rQ   r   r   r	   r
   )
__future__r   r   typingr   r   r   r   r   r   rH   r   r#   r,   r2   rI   rO   r   r   r   r   r   <module>   s   





