o
    צi                     @   s   d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ ddl	m
Z
 ee jd Zeed  d	e jfd
dZdd	efddZedkrLee dS )    N)replace)Path)load_dotenv   )build_config   z.envreturnc                  C   s  t d} | d | d | d | jdddd | jd	d
dd | jdd
dd | jddd | jddd | jdt jd d | jdtd | jdd
d | jdd
d | jddd | jddd | jddd | jddd d | jd!dd | jd"dd | jd#d$g d%d& | jd'd
d | jd(d
d | jd)dd*d | jd+d$g d,d& | jd-d$g d.d& | jd/d$g d0d& | jd1d$g d2d& | jd3d4d5}|jd6d7d |jd8d9d |jd:d;d |jd<d=d}|jd>td?d@dA |jdBd
dCd |jdDdEd}|jdFdGd |jdHdId |jdJdKd |jdLdMd |jdNdOd |jdPdQd |jdRdSd |jdTdUd |jdVdWd |jdXdYd |jdZd[d |jd\d]d | S )^NzAroFlo UI Automation (Zones)z
--base-urlz
--usernamez
--passwordz--tenant-id z6Tenant/Org identifier for session pooling (e.g. orgid))defaulthelpz--reuse-session
store_truez5Reuse a persistent Playwright session for this tenant)actionr   z--keep-openz3Keep browser/session open after running the commandz--state-filez*Override storageState.json path (advanced))r   z--artifacts-dirzOverride artifacts directoryz
--headless)r   r
   z--slow-mo-ms)typez--step)r   z--pause-on-mfaz
--mfa-code)r
   --timesheet-datez--timesheet-bu--buz.General BU selector (alias for --timesheet-bu)--timesheet-user-id--timesheet-user-name--rowappendzLTimesheet row spec: hours=5;overhead=...;worktype=NT;tracking=ADMIN;note=...)r   r
   r   --delete-all--include-protected--user-emailz&Target user email for Users navigation--docz6User doc spec: file=/a.pdf;comment=...;filter=Show All--filezLegacy: file path (repeatable)	--commentzLegacy: comment (index-based)--filterzLegacy: filter (index-based)cmdT)destrequiredshellz2Interactive session shell (keeps Playwright alive)statusz+Show session status for the tenant (if any)close-sessionz&Close session for the tenant (if open)cleanup-artifactsz3Delete old artifacts (png/html) under artifacts dirz--days   z0Delete artifacts older than N days (default: 14))r   r
   r   z	--dry-runzOnly show what would be deletedtimesheets-navz3Navigate: Dashboard -> Manage -> Timesheets (zones)timesheets-createzCreate timesheet rows (zones)timesheets-deletezDelete timesheet rows (zones)	users-navz.Navigate: Dashboard -> Manage -> Users (zones)users-upload-docsz"Upload documents to a user (zones)siteadmin-homez4Navigate directly to SiteAdministration home (zones)siteadmin-business-unitsz"SiteAdministration: Business Unitssiteadmin-userszSiteAdministration: Userssiteadmin-settingszSiteAdministration: Settingssiteadmin-integrationzSiteAdministration: Integrationsiteadmin-settings-generalz!SiteAdmin Settings: General groupsiteadmin-settings-timesheetsz$SiteAdmin Settings: Timesheets groupsiteadmin-timesheets-overheadsz*SiteAdmin Settings: Timesheets > Overheads)argparseArgumentParseradd_argumentBooleanOptionalActionintadd_subparsers
add_parser)psubcts r<   R/var/www/html/flask_server/apps/aroflo_connector_app/ui_automation_zones/runner.pybuild_parser   s`   



r>   c           B         s  t  | tjdkrCddlmm  ddlm}m		 j
p$d|dtd  td dtffd	d
ddtdtf 	fdd}	 ztd }W n tye   d}Y nw zt|}W n tyz   | }Y nw |d d pdgd  }|dd  }|dv rtd n|dkrt qQ|dkr|r|d  njpd}||}|rtd t qQ|dkrV}	|	y jjpd d}
ddlm} z.}|rtd| d}|j|
j|dd 	|
jd |
  |
   td  W n. tyD } z!z		|
jd! W n
 ty2   Y nw td"|  W Y d }~nd }~ww W d    n	1 sPw   Y  qQ|d#kr}	|	 jjpnd d}
ddlm} dd$lm!} ddlm"} dd%lm#} dd&l$m% z}t&d'd rt'j(ng }d(t't dt)fd)d*}|rbt*d+d, |D r||}|d- s|d. s|d/ s|d0 rt|d- p܈j+|d. pj,|d/ pj-|d0 pj.d1}|d2 D ]}|r|/| qn]d}dd}|D ]}d3|v r+t0|d4kr+|d5 d3kr+|d6 d3kr+|qr:fd7d8|D }n|}|rN|d }d|dd   }t|pUj+pZj,|p_j-d9}d }|rg }|D ]p}|}t1|t)r||/| qki }t|d:D ]*}| }|sqd;|vrt2d<||d;d\}}| ||  < q|d=r|d>st2d?| |3d@dA |3dBdC |3dDd |/| qkfdEd8|D }nt&|d'd rfdFd8|j(D }||
j| |j.s|j-r|j|
j||j.|j-dG |j,r#|j|
j||j,dH |j|
j||dI 	|
jdJ |
  |
   tdK W n. tyo } z!z		|
jdL W n
 ty]   Y nw tdM|  W Y d }~nd }~ww W d    n	1 s{w   Y  qQ|dNkr}	|	s jjpd d}
ddlm} dd$lm!} ddlm"} ddOlm4} ddPl5m6}  z}d(t't dt)fdQd*}|rit*dRd, |D r||}t|d- pj+|d. pj,|d/ pj-|d0 pj.|dS pj7|dT pj8dU}n]d}dd}|D ]}d3|v r2t0|d4kr2|d5 d3kr2|d6 d3kr2|qrAfdVd8|D }n|}|rU|d }d|dd   }t|p\j+paj,|pfj-d9}| dWdXgdYgdZtt&|dSdtt&|dTdd[}!||
j| |j.s|j-r|j|
j||j.|j-dG |j,r|j|
j||j,dH |j|
j||!d\ 	|
jd] |
  |
   td^ W n. ty } z!z		|
jd_ W n
 ty   Y nw td`|  W Y d }~nd }~ww W d    n	1 sw   Y  qQ|dakrш}	|	 jjp"d d}
ddl9m} zd}|rudd}|D ]}db|v rEsE|q9rYdfdcd8|D  }nd| }sf|rutpmj:|prj+dd}||
j| 	|
jde |
  |
   tdf W n. ty } z!z		|
jdg W n
 ty   Y nw tdh|  W Y d }~nd }~ww W d    n	1 sw   Y  qQ|dikrT}	|	m jjpd d}
ddjl;m<
 ddklm		 z
=|
j 	|
jdl |
  |
   tdm W n. tyB } z!z		|
jdn W n
 ty0   Y nw tdo|  W Y d }~nd }~ww W d    n	1 sNw   Y  qQ|dpkrو}	|	o jjpkd d}
ddql>m?}" ddklm		 z|"|
j 	|
jdr |
  |
   tds W n. ty } z!z		|
jdt W n
 ty   Y nw tdu|  W Y d }~nd }~ww W d    n	1 sw   Y  qQ|dvkr^}	|	o jjpd d}
ddwl>m@}# ddklm		 z|#|
j 	|
jdx |
  |
   tdy W n. tyL } z!z		|
jdz W n
 ty:   Y nw td{|  W Y d }~nd }~ww W d    n	1 sXw   Y  qQ|d|kr}	|	o jjpud d}
dd}lAmB}$ ddklm		 z|$|
j 	|
jd~ |
  |
   td W n. ty } z!z		|
jd W n
 ty   Y nw td|  W Y d }~nd }~ww W d    n	1 sw   Y  qQ|dkrh}	|	o jjpd d}
ddlCmD}% ddklm		 z|%|
j 	|
jd |
  |
   td W n. tyV } z!z		|
jd W n
 tyD   Y nw td|  W Y d }~nd }~ww W d    n	1 sbw   Y  qQ|dkr}	|	o jjpd d}
ddlEmF}& ddklm		 z|&|
j 	|
jd |
  |
   td W n. ty } z!z		|
jd W n
 ty   Y nw td|  W Y d }~nd }~ww W d    n	1 sw   Y  qQ|dk	rr}	|	o jj	pd d}
ddlEmG}' ddklm		 z|'|
j 	|
jd |
  |
   td W n. t	y` } z!z		|
jd W n
 t	yN   Y nw td|  W Y d }~nd }~ww W d    n	1 	slw   Y  qQ|dk	r}	|	o jj	pd d}
ddl>mH}( ddklm		 z|(|
j 	|
jd |
  |
   td W n. t	y } z!z		|
jd W n
 t	y   Y nw td|  W Y d }~nd }~ww W d    n	1 	sw   Y  qQ|dkr!}	|	 jj
pd d}
ddl9m} ddl9m"} ddl9mI}) ddlJmK}* z}t't&dg 
p9g }+t't&dg 
pDg },t't&dg 
pOg }-t't&dg 
pZg }.d(t't dt)fdd*}|
rt*dd, |D 
r||}t|d- 
pj+|d 
pj:d}|+Ldd8 |d D  |,Ldd8 |d D  |-L|d  |.L|d  n9|
r|d nd}t0|dk
r|d ndt0|dk
r|dd  ng }/t|
pވj+
pj:d}|,L|/ g }0|+rJ|+D ]V}dd8 t|d:D }1i }2|1D ]!}d;|vrt2d||d;d\}}| |2|  < q|2ds3t2d||0/|*|2d |2dd|2ddd 
qn5|,sQt2dtM|,D ])\}3}4|3t0|-k rd|-|3 nd}5|3t0|.k rq|.|3 nd}6|0/|*|4|5|6d qUt&|ddpd st2d||
j| d|
jjNpdvr|
jOdP dkr|jQ|
j|j:d}7|7jRst2d|j: |)jS|
j|0|dd 	|
jd |
  |
   td W n. ty } z!z		|
jd W n
 ty   Y nw td|  W Y d }~nd }~ww W d    n	1 sw   Y  qQ|dv r,td dS |dkr;T td qQtd|  qRjdkr}ddlUmV}8 |8jWjXtjYdō}9t1|9tZrntd|9 dǈjY  dS tdt0|9 dǈjY  dS ddlm jdkrj
pd}:t|: dS jdkrTj
pd td˃ dS jdkrddl[m\}; |;jd͍S jd#krddl]m^}< |<jd͍S jdNkrddl_m`}= |=jd͍S jdakrddlamb}> |>jd͍S jdkrddlcmd}? |?jd͍S jdikr.ddlme}@ ddjl;m<
 
fddԄ}A|@|AjtfdՍS jdpkrKddlme}@ ddql>m?}" |@|"jjtfdՍS jdvkrhddlme}@ ddwl>m@}# |@|#jjtfdՍS jd|krddlme}@ dd}lAmB}$ |@|$jjtfdՍS jdkrddlme}@ ddlCmD}% |@|%jjtfdՍS jdkrddlme}@ ddlEmF}& |@|&jjtfdՍS jdkrddlme}@ ddlEmG}' |@|'jjtfdՍS jdkrddlme}@ ddl>mH}( |@|(jjtfdՍS tgdփ)Nr   r   )SESSION_POOLMFARequired)create_run_dirshotz	<default>z[UIZ][shell] tenant=aX  [UIZ][shell] commands: status | connect | timesheets-nav | timesheets-create | timesheets-delete | users-nav | users-upload-docs | siteadmin-home | siteadmin-business-units | siteadmin-users | siteadmin-settings | siteadmin-settings-general | siteadmin-settings-timesheets | siteadmin-timesheets-overheads | siteadmin-integration | close | exitr   c                     sL   zt j } W n ty   d} Y nw t jpd p%ttddp%| S )NFr	   pause_on_mfa)sysstdinisatty	Exceptionboolmfa_codestripgetattr)interactive)argscfgr<   r=   
_allow_mfae   s   zmain.<locals>._allow_mfar	   rI   c              	      s    }|A z+j|  d}z	|jd W n	 ty&   Y nw |  W W d    dS   yG   td Y W d    dS w 1 sKw   Y  d S )NrN   	tenant_idrun_dirrI   	allow_mfazshell-connectedTz^[UIZ] MFA_REQUIRED: reintenta con --pause-on-mfa o pasa --mfa-code 123456 (o usa comando mfa).F)tenant_lockgetpagerG   touchprint)rI   lockrt)r@   r?   rO   rN   rR   rB   rQ   r<   r=   _connectq   s0   
zmain.<locals>._connectTzui> exitr   )r\   quitz[UIZ][shell] byer    connectz[UIZ] connectedr$   rP   )nav )timesheet_buF)select_userzshell-timesheets-nav-okz[UIZ] timesheets-nav OKzshell-timesheets-nav-errorz[UIZ] timesheets-nav ERROR: r%   )select_date)create
NewRowSpectimesheet_rowstokensc                 S   sT  ddddg d}d}|t | k r| | }|dv r/|d t | k r&| |d  nd|d< |d7 }q
|dv rJ|d t | k rA| |d  nd|d	< |d7 }q
|d
v re|d t | k r\| |d  nd|d< |d7 }q
|dv r|d t | k rw| |d  nd|d< |d7 }q
|dkr|d |d t | k r| |d  nd |d7 }q
|d7 }|t | k s|S )Nr	   )budate	user_nameuser_idrowsr   r   r   ri      r   z--daterj   r   z--userz--user-namerk   r   z	--user-idrl   r   rm   lenr   rh   outitr<   r<   r=   _parse_shell_flags   s6   $$$$*z main.<locals>._parse_shell_flagsc                 s       | ]}| d V  qdS z--N
startswith.0rr<   r<   r=   	<genexpr>       zmain.<locals>.<genexpr>ri   rj   rk   rl   )ra   timesheet_datetimesheet_user_nametimesheet_user_idrm   -
         c                       g | ]}| kr|qS r<   r<   r   rx   rj   r<   r=   
<listcomp>
      zmain.<locals>.<listcomp>)ra   r   r   ;=z*Invalid --row token (expected key=value): hoursoverheadz--row missing hours/overhead: worktypeNTtrackingADMINnotec                    @   g | ]} |d  |d | dpd| dd| dddqS 	r   r   r   Nr   r   r   r   )r   r   r   worktype_labeltracking_labelrU   r~   re   r<   r=   r   1      

c                    r   r   r   r~   re   r<   r=   r   <  r   )rl   rk   )target_date)rm   zshell-timesheets-create-okz[UIZ] timesheets-create OKzshell-timesheets-create-errorz[UIZ] timesheets-create ERROR: r&   )delete)
DeleteRulec                 S   sN  ddddddd}d}|t | k r| | }|dv r0|d t | k r'| |d  nd|d< |d7 }q|d	v rK|d t | k rB| |d  nd|d
< |d7 }q|dv rf|d t | k r]| |d  nd|d< |d7 }q|dv r|d t | k rx| |d  nd|d< |d7 }q|dkrd|d< |d7 }q|dkrd|d< |d7 }q|d7 }|t | k s|S )Nr	   F)ri   rj   rk   rl   
delete_allinclude_protectedr   rn   r   ri   ro   rp   rj   rq   rk   rr   rl   r   Tr   r   r   )rt   ru   r<   r<   r=   ry   p  sJ   $$$$c                 s   rz   r{   r|   r~   r<   r<   r=   r     r   r   r   )ra   r   r   r   r   r   c                    r   r<   r<   r   r   r<   r=   r     r   zAdmin Dutiesz!Admin Duties - TelecommunicationszLunch Break - Unpaidexact)overheads_to_deleteprotected_overheads
match_moder   r   )rulezshell-timesheets-delete-okz[UIZ] timesheets-delete OKzshell-timesheets-delete-errorz[UIZ] timesheets-delete ERROR: r'   @c                    r   r<   r<   r   )emailr<   r=   r     r   )
user_emailra   zshell-users-nav-okz[UIZ] users-nav OKzshell-users-nav-errorz[UIZ] users-nav ERROR: r)   )siteadministration)rB   zshell-siteadmin-home-okz[UIZ] siteadmin-home OKzshell-siteadmin-home-errorz[UIZ] siteadmin-home ERROR: r*   )bussiness_unitsz!shell-siteadmin-business-units-okz![UIZ] siteadmin-business-units OKz$shell-siteadmin-business-units-errorz&[UIZ] siteadmin-business-units ERROR: r+   )userszshell-siteadmin-users-okz[UIZ] siteadmin-users OKzshell-siteadmin-users-errorz[UIZ] siteadmin-users ERROR: r,   )settingszshell-siteadmin-settings-okz[UIZ] siteadmin-settings OKzshell-siteadmin-settings-errorz [UIZ] siteadmin-settings ERROR: r.   )generalz#shell-siteadmin-settings-general-okz#[UIZ] siteadmin-settings-general OKz&shell-siteadmin-settings-general-errorz([UIZ] siteadmin-settings-general ERROR: r/   )
timesheetsz&shell-siteadmin-settings-timesheets-okz&[UIZ] siteadmin-settings-timesheets OKz)shell-siteadmin-settings-timesheets-errorz+[UIZ] siteadmin-settings-timesheets ERROR: r0   )	overheadsz'shell-siteadmin-timesheets-overheads-okz'[UIZ] siteadmin-timesheets-overheads OKz*shell-siteadmin-timesheets-overheads-errorz,[UIZ] siteadmin-timesheets-overheads ERROR: r-   )integrationzshell-siteadmin-integration-okz[UIZ] siteadmin-integration OKz!shell-siteadmin-integration-errorz#[UIZ] siteadmin-integration ERROR: r(   )upload_docs)DocSpec	user_docs
user_filesuser_commentsuser_filtersc                 S   s  ddg g g g d}d}|t | k r| | }|dv r0|d t | k r'| |d  nd|d< |d7 }q|dv rK|d t | k rB| |d  nd|d	< |d7 }q|d
kri|d |d t | k ra| |d  nd |d7 }q|dkr|d |d t | k r| |d  nd |d7 }q|dkr|d |d t | k r| |d  nd |d7 }q|dkr|d |d t | k r| |d  nd |d7 }q|d7 }|t | k s|S )Nr	   )ri   r   docsfilescommentsfiltersr   rn   r   ri   ro   )r   z--emailr   r   r   r   r   r   r   r   r   rs   ru   r<   r<   r=   ry     sJ   $$****c                 s   rz   r{   r|   r~   r<   r<   r=   r     r   r   )ra   r   c                 S      g | ]}|r|qS r<   r<   )r   dr<   r<   r=   r         r   c                 S   r   r<   r<   )r   fr<   r<   r=   r     r   r   r   r   ro   c                 S   s   g | ]
}|  r|  qS r<   )rJ   )r   r8   r<   r<   r=   r   1  s    z*Invalid --doc chunk (expected key=value): filez --doc missing required 'file=': commentfilter)r   r   r   z7Missing files. Use --doc ... OR --file /path/to/doc.pdfr   z Missing --user-email (required).z
thisUser=1ztable#tblUsers)rR   zUser not found by email: iȯ  )r   rN   rR   
timeout_mszshell-users-upload-docs-okz[UIZ] users-upload-docs OKzshell-users-upload-docs-errorz[UIZ] users-upload-docs ERROR: closez[UIZ][shell] session closedz[UIZ][shell] unknown: r"   )cleanup_artifacts)artifacts_dirdaysdry_runz&[UIZ] cleanup-artifacts done. deleted=z	 dry_run=z$[UIZ] cleanup-artifacts done. items=)r?   r!   z[UIZ] session closed)cmd_timesheets_nav)rI   )cmd_timesheets_create)cmd_timesheets_delete)cmd_users_nav)cmd_users_upload_documents)run_oncec                    s     |  d S N)ensure_siteadministration)rV   _cfg_run_dir)siteadmin_selr<   r=   _run  s   zmain.<locals>._run)rI   rS   zUnknown command)r	   )hr>   
parse_argsr   r   core.runtimer?   r@   core.artifactsrA   rB   rQ   rX   rH   strinputrJ   EOFErrorshlexsplitrG   lowerr    rI   rT   rU   zones.timesheets.flowsr_   r   joinrunrV   
save_staterW   rc   rb   rd   zones.timesheets.flows.createrf   rK   listrg   dictanyra   r   r   r   r   rt   
isinstanceRuntimeError
setdefaultr   zones.timesheets.flows.deleter   r   r   zones.users.flowsr   common.selectorsr   r   common.siteadministrationr   r   "common.siteadministration.settingsr   *common.siteadministration.settings.generalr   -common.siteadministration.settings.timesheetsr   r   r   r   zones.users.flows.upload_docsr   extend	enumerateurllocatorcountselect_user_by_emailfoundusers_upload_documentsr   maintenance.cleanup_artifactsr   r   r   r   r5   zones.timesheets.commands.navr    zones.timesheets.commands.creater    zones.timesheets.commands.deleter   zones.users.commands.navr    zones.users.commands.upload_docsr   r   rS   
SystemExit)BargvrA   r[   cmdlinerh   r   restcodeokrY   rZ   flow_navcfg_rune	flow_date	flow_userflow_createrm   ry   parsedspecri   rk   tokenrest_no_dateparsed_rowssrv   partkvflow_deleter   r   sa_busa_userssa_settings
sa_generalsa_tssa_ovsa_integration	flow_docsr   
docs_specsr   r   r   extra_filesr   partskvrw   r   r:   fltresultr   deletedr    r   r   r   r   r   r   r   r<   )r@   rf   r?   rO   rM   rN   rj   r   rR   rB   r   rQ   r=   mainW   s  

$




(
4








  


'4


|




'


























'



,*  


          pr%  __main__r   )r1   rD   r   dataclassesr   pathlibr   dotenvr   core.configr   __file__resolveparents	CORE_ROOTr2   r>   r5   r%  __name__r   r<   r<   r<   r=   <module>   s*   G       	
