a
    #yi
&                     @   sr   d dl Z d dlZd dlZd dlZd dlmZ dZdZdZdadd Z	dd	d
Z
dd Zdd Zdd Zdd ZdS )    N)datetimezdhttps://autogestion-empresas.claro.com.ar/sites/launchpad#zcrm0204gestionesgeneraleslineas-Display&/zSapplication-zcrm0204gestionesgeneraleslineas-Display-component---Menu--input_cuentazUapplication-zcrm0204gestionesgeneraleslineas-Display-component---Menu--inpLinea-innerFc                    s  |  dt d}|dI d H }|r@||v r@td|  dS td | dt dI d H }|rt| I d H  n| dt I d H  tdI d H  g d	}|D ]}| |I d H }|rtd
| dt	| d |D ]R}|
 I d H }	||	v r| I d H  tdI d H  td|	     dS q q8q|dI d H }
|
rbtd|
 d dS td| d | jddI d H  dS )N#z-innervaluez  Cuenta ya seleccionada: TzAbriendo dropdown cuenta...z .sapMInputBaseIconContainer   )[role='option']z[role='listitem']z.sapMSelectListItemz.sapMListTbl trz.sapMLIBContentz  Encontrado con 'z':  itemsz  Cuenta seleccionada: z  Cuenta en campo: z (usando valor existente)z	  Cuenta z no encontradazerror_cuenta.pngpathF)locator	ID_CUENTAget_attributeprintquery_selectorclickasynciosleepquery_selector_alllen
inner_textstrip
screenshot)pagenumero_cuentaZinput_cuentaZvalor_actualZboton_dropdownZ
selectoresselectoritemsitemtextoZvalor r   /home/Claro/claro/extractor.pyseleccionar_cuenta   s>    
r   c                    s  |rHt d | jtddI d H  tdI d H  t| |I d H }|sHdS t d|  | dt }| I d H  tdI d H  | j	
d	I d H  | j	
d
I d H  tdI d H  | j	j|ddI d H  tdI d H  t d g d}g }tdD ]H}|D ]"}	| |	I d H }|r q&q|r2 qDtdI d H  q|sh| jddI d H  t d dS t dt| d ts`| dI d H }
|
rht d |
 I d H  tdI d H  tdD ]}g }|D ]4}	| |	I d H }|rt|t|kr qq|r>t|t|kr>|}t dt| d  qRtdI d H  qdat d nt d |D ]`}| I d H }||v rl| d|I d H  tdI d H  t d | d d!    dS qlt d"| d# dS )$Nz"Navegando a Gestiones en Lineas...domcontentloaded)
wait_until   FzIngresando linea: r   g      ?z	Control+aDelete   )delayr   z#  Esperando lista de sugerencias...)z.sapMSuggestionItemz.sapMSuggPopover lir   z.sapMLIBz.sapMSLI   zdebug_linea.pngr   z'  Sin sugerencias - ver debug_linea.pngz  Lista aparecio con r   z#btnGrowingz  Haciendo clic en Ver mas...   
   z  Lista completa: Tz-  Ver mas clickeado, no se volvera a clickearz(  Ver mas ya fue clickeado anteriormentea  el => {
                el.dispatchEvent(new MouseEvent('mousedown', {bubbles: true}));
                el.dispatchEvent(new MouseEvent('mouseup',   {bubbles: true}));
                el.dispatchEvent(new MouseEvent('click',     {bubbles: true}));
            }   z  Linea seleccionada: <   z  Linea z no encontrada en la lista)r   gotoURL_CONSUMOr   r   r   r
   ID_LINEA_INPUTr   keyboardpresstyperanger   r   r   _vermas_clickeador   r   evaluater   )r   r   numero_lineaprimera_vezokZinput_lineaZselectores_sugr   Zintentor   Zboton_vermasZitems_nuevosr   r   r   r   r   seleccionar_lineaA   s~    





r7   c                    s  t d g d}d}|D ]n}zX| |j}| I d H }|rr| I d H  tdI d H  t d|  d}W  qW q   Y qY q0 q| szD| dj| dd	j I d H  tdI d H  d}t d
 W n*   | jddI d H  t d g  Y S 0 | 	dI d H }t dt
|  g }|D ]X}	z|	dI d H }
|	dI d H }|	dI d H }|	dI d H }|
r|
 I d H nd}|r| I d H nd}|r| I d H nd}|r| I d H nd}t||}t d|||||d |d |d |d	}|| t d| d| d| d|d  d|d  d|  W n4 ty~ } zt d |  W Y d }~n
d }~0 0 q(|S )!Nz Navegando a Saldos y Consumos...)z+.sapMSLITitle:has-text('Saldos y Consumos')z'.sapMText:has-text('Saldos y Consumos')z li:has-text('Saldos y Consumos')z*.sapMNavItem:has-text('Saldos y Consumos')z[title='Saldos y Consumos']Fr"   z  Menu clickeado con: Tztext=Saldos y Consumosz:visible)hasz#  Menu clickeado con filtro visiblezdebug_menu.pngr   z/  No se pudo clickear menu - ver debug_menu.pngz.zBloqueBordeRedondeadozBloques encontrados: z.sapMTitle spanz.sapSuiteRMCInsideLabelz.sapMObjectIdentifierText spanZbdiz
Sin tituloN/Az%Y-%m-%d %H:%Musadototalunidad)	ZfechalineatituloZporcentaje_usadodetaller:   r;   r<   
renovacionz  z: z | z	 | usado= z  Error en bloque: )r   r
   first
is_visibler   r   r   filterr   r   r   r   r   parsear_detaller   nowstrftimeappend	Exception)r   r4   Zselectores_menuZ	clickeador   ZelementovisibleZbloques
resultadosZbloqueZ	titulo_elZpct_elZ
detalle_elZrenovacion_elr>   Z
porcentajer?   r@   parsedr   er   r   r   extraer_bloques   sl    
$



8(rN   c                 C   s   | st d d S tdddd"}tj| |ddd W d    n1 sF0    Y  td	dd
dd8}tj|| d  d}|  ||  W d    n1 s0    Y  t dt	|  d t d t d d S )NzSin resultados para guardarzconsumo_todas.jsonwzutf-8)encodingFr   )ensure_asciiindentzconsumo_todas.csv )newlinerP   r   )Z
fieldnamesz
Listo. z registros guardados.z  -> consumo_todas.jsonz  -> consumo_todas.csv)
r   openjsondumpcsvZ
DictWriterkeysZwriteheaderZ	writerowsr   )rK   fwriterr   r   r   guardar_resultados_archivo   s    0(r\   c                 C   sz   | r| dkrddddS t d| }|rntt|ddd}|d	}t|d
dd}|||dS ddddS )zt
    Entrada:  '2276.27 Min de 10000 Min'
    Salida:   { 'usado': 2276.27, 'total': 10000.0, 'unidad': 'Min' }
    r9   Nr   )r:   r;   r<   z*([\d,.]+)\s*(\w+)\s+de\s+([\d,.]+)\s*(\w+)r)   ,.r   r"   )researchintfloatgroupreplace)r?   r>   matchr:   r<   r;   r   r   r   rE      s    
rE   c                 C   sL   | D ]B}|d dkr|d dkrt d|d  d|d  d	 || qd
S )z]
    Revisa cada resultado y llama a callback_alerta
    cuando el campo usado llega a 0
    r:   r   r<   r9   z  ALERTA: linea r=   z - r>   u    llegó a 0N)r   )rK   Zcallback_alertar   r   r   r   verificar_alertas  s    rf   )F)r   rV   rX   r_   r   r,   r   r-   r2   r   r7   rN   r\   rE   rf   r   r   r   r   <module>   s   2
ZJ