o
    •óniÞ  ã                   @  sÐ   d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	m
Z
mZ d dlmZmZmZmZ d dlmZ d dlmZ edeƒZd#dd„Zd$dd„Zd%dd„Zd&dd„Zd'd(dd„Ze d ¡d!d"„ ƒZdS ))é    )ÚannotationsN)ÚPath)ÚAnyÚDictÚList)Ú	BlueprintÚrequestÚjsonifyÚcurrent_app)Úget_session)ÚRolePositionMapÚleave_api_usersÚreturnÚstrc                   C  s   t ttƒ ¡ jd ƒS )Né   )r   r   Ú__file__ÚresolveÚparents© r   r   úE/var/www/html/flask_server/apps/leave_form_app/api/v1/routes_users.pyÚ_project_root&   s   r   Ú
positionidÚpositionnamec                 C  s‚   t ƒ }z8| t¡}d }| r| tj| k¡ ¡ }|s%|r%| tj|k¡ ¡ }|r5|jr5|jr5|jW | 	¡  S W | 	¡  dS | 	¡  w )NÚworker)
r   Úqueryr   Úfilterr   Úfirstr   Ú
is_enabledÚroleÚclose)r   r   ÚsessionÚqÚrowr   r   r   Ú_resolve_role_from_position*   s   

þr#   ÚuúDict[str, Any]úDict[str, str]c              	   C  s$  |   d¡pi }|   d¡pi }|   d¡pd ¡ }|   d¡pd ¡ }|› d|›  ¡ p1|   d¡p/d ¡ }|  d¡p=|   d¡p=d ¡ }|  d	¡pU|   d
¡pU|   d	¡pU|   d¡pUd ¡ }|   d¡p^d ¡ |   d¡pfd ¡ |   d¡pp|ppd ¡ ||  d¡p~|   d¡p~d ¡ |  d¡p‹|   d¡p‹d ¡ ||dœS )NÚorgÚuserpositionÚ
givennamesÚ Úsurnameú Úusernamer   r   ÚpositionpositionnameÚpositionÚuseridÚemailÚorgidÚorgname)r0   r1   r-   Ú	full_namer2   r3   r   r   )ÚgetÚstrip)r$   r'   r(   r)   r+   r4   r   r   r   r   r   Ú_normalize_user_from_list_item:   s    $0ør7   úList[Dict[str, str]]c                  C  sî   t  d¡pd ¡ } | sg S zXt | ¡}t|tƒsg W S g }|D ]>}t|tƒs'q| | 	d¡p/d ¡ | 	d¡p7d ¡ | 	d¡p?d ¡ | 	d¡pGd ¡ | 	d¡pOd ¡ | 	d¡pWd	 ¡ d
œ¡ qdd„ |D ƒW S  t
yv   tj d¡ g  Y S w )NÚLEAVE_APP_MANAGERS_JSONr*   r-   r1   r0   r   r3   r   Úmanager)r-   r1   r0   r   r3   r   c                 S  s$   g | ]}|  d ¡s|  d¡r|‘qS )r-   r1   ©r5   ©Ú.0Úmr   r   r   Ú
<listcomp>h   s   $ z+_load_managers_from_env.<locals>.<listcomp>z+[leave_app] invalid LEAVE_APP_MANAGERS_JSON)ÚosÚgetenvr6   ÚjsonÚloadsÚ
isinstanceÚlistÚdictÚappendr5   Ú	Exceptionr
   ÚloggerÚ	exception)ÚrawÚdataÚoutÚitr   r   r   Ú_load_managers_from_envS   s0   



ú	þrO   éÈ   é   ÚpagesizeÚintÚpagec                 C  s¶   t ƒ }tjddddddt| ƒdt|ƒg
}tj ¡ }|| d¡r%d	|d  nd
 |d< d|d< tj	|||ddd}|j
dkrOtd|j
› d|j ¡ d d… › ƒ‚|jpSd
 ¡ }t |¡S )Nz-mzapps.aroflo_connector_app.cliÚusersrE   z--rawz
--pagesizez--pageÚ
PYTHONPATHú:r*   Ú1ÚPYTHONNOUSERSITET)ÚcwdÚenvÚcapture_outputÚtextr   zAroFlo CLI failed rc=z stderr=i   )r   ÚsysÚ
executabler   r@   ÚenvironÚcopyr5   Ú
subprocessÚrunÚ
returncodeÚRuntimeErrorÚstderrr6   ÚstdoutrB   rC   )rR   rT   Úproject_rootÚcmdr[   ÚprocrM   r   r   r   Ú_run_aroflo_users_listn   s   û
"
$
rk   z/users/managersc            
        s–  t j d¡pd ¡ ‰ tƒ } | r"ˆ r‡ fdd„| D ƒ} tdd| dœƒS z„tdd	}| d
¡p.|}| d¡p5i }| d¡p<g }t|tƒsDg }g }|D ]M}t|t	ƒsPqHt
|ƒ}t| dd¡| dd¡ƒ}|dvrfqHˆ rp| d¡ˆ krpqH| | dd¡| dd¡| dd¡| dd¡| dd¡| dd¡|dœ¡ qH|jdd„ d tdd|dœƒW S  tyÊ }	 ztj d¡ tdt|	ƒddœƒdfW  Y d}	~	S d}	~	ww )ul   
    Query params opcionales:
      - orgname: filtra por orgname si llega (Ãºtil si manejas multi-org)
    r3   r*   c                   s"   g | ]}|  d ¡p
dˆ kr|‘qS )r3   r*   r;   r<   ©r3   r   r   r?   ’   s   " z"users_managers.<locals>.<listcomp>Úokr[   )ÚstatusÚsourceÚmanagersiô  )rR   rL   ÚzoneresponserU   r   r   )r:   ÚadminÚdirectorr0   r1   r-   r4   )r0   r1   r-   r4   r   r3   r   c                 S  s   |   d¡p|   d¡pd ¡ S )Nr4   r-   r*   )r5   Úlower)Úxr   r   r   Ú<lambda>¶   s    z users_managers.<locals>.<lambda>)ÚkeyÚ
aroflo_cliz![leave_app] users_managers failedÚerrorzaIf your CLI list command differs, update _run_aroflo_users_list() or set LEAVE_APP_MANAGERS_JSON.)rn   ÚmessageÚhintN)r   Úargsr5   r6   rO   r	   rk   rD   rE   rF   r7   r#   rG   ÚsortrH   r
   rI   rJ   r   )
Úmanagers_envÚpayloadrL   ÚzrrU   rM   r$   Únormr   Úer   rl   r   Úusers_managers†   sZ   









ùýü€þrƒ   )r   r   )r   r   r   r   r   r   )r$   r%   r   r&   )r   r8   )rP   rQ   )rR   rS   rT   rS   r   r%   )Ú
__future__r   r@   rB   r^   rb   Úpathlibr   Útypingr   r   r   Úflaskr   r   r	   r
   Ú	config.dbr   Úapps.leave_form_app.modelsr   Ú__name__Úusers_bpr   r#   r7   rO   rk   r5   rƒ   r   r   r   r   Ú<module>   s$   




