
    j                        d Z ddlZddlZddlmZmZmZmZmZmZm	Z	m
Z
 ddlZddlZddlZddlmZmZmZ ddlmZ ddlmZmZ  ej        eddd	
            ej        d ej        d ej         ej        d          d          g           ej         d ej!         ej"        dd                     ej#         ej        d ej         ej$        d           ej        dd          gd           ej         ej$        d           ej        dd          gd           ej         ej%        d d!d"d#          gd           ej         ej&        d$d%&                    g          g          g           ej'        d'           ej(        d(d&           ej         d ej!         ej"        d)d                     ej#         ej        d ej         ej$        d*           ej)        d+d,-          gd	           ej         ej%        d.d/d0d#          gd           ej         ej&        d1d%&                    g          g          g           ej'        d2           ej(        d3d&           ej*        d4d5          g6          Z+ e ed4d7           ed$d8           ed!d9           edd:           edd:           ed4d7          d;          d<             Z, e ed(d8           ed+d=           ed3d8           ed4d7                    d>             Z- e ed1d8           ed/d9           ed+d:          d;          d?             Z.dS )@uO   
Página de gestión: añadir tickers personalizados y forzar descarga manual.
    N)dcchtmlInputOutputStatecallback
dash_table	no_update)get_tickers_extra   añadir_ticker_extraeliminar_ticker_extra)ACTIVOS)descargar_tickerDATA_DIRz/gestionu   Gestión   )pathnameorderTz	mt-3 mb-3u   Gestión de Valoresauto)width)	classNamechildrenzmb-4u   Añadir ticker personalizadozmb-0r   zg-2 align-items-endzNombre (sin espacios, usar _)zgest-nombrez	ej. Tesla)idplaceholder   )mdzTicker Yahoo Financezgest-tickerzej. TSLA   u   Añadir y descargarzgest-btn-addprimary)r   colorn_clickszgest-msgztext-muted align-self-center)r   r   zTickers personalizados activoszgest-tabla-extrasu   Actualización manualzValor a actualizarzgest-actualizar-empresaF)r   	clearablezActualizar ahorazgest-btn-updatesuccesszgest-update-msgzEstado de los datos descargadoszgest-estado-csvszgest-refresh)r   data)fluidr   r$   r   r!   value)prevent_initial_callc                    |r|s	t           dfS |                                                    dd          }|                                                                }	 t	          j        |                              d          }|j        rt           d| dfS n## t          $ r}t           d| fcY d }~S d }~ww xY wt          ||           t          ||           |pd	d
z   d| d| dfS )NzIndica nombre y ticker. _5d)periodzNo se encontraron datos para 'z' en Yahoo Finance.zError al verificar ticker: r         ✓ 'z' (u   ) añadido y descargado.)r
   stripreplaceupperyfTickerhistoryempty	Exceptionr   r   )r*   nombretickerrefreshinfoes         '/var/www/html/bolsaweb/pages/gestion.py   añadir_tickerr=   H   s.     4 4333\\^^##C--F\\^^!!##F<y  (((55: 	[ZvZZZZZ	[ < < <;;;;;;;;;;< (((VV$$$LqARvRR&RRRRRs   ;B 
B:$B5/B:5B:optionsc           
      r   t                      }|r1t          j        d |D             ddddddgddddd	d
d          nt          j        dd          }d |D             }i t
          |}d t          |          D             }g }t          |                                          D ]}t          j	        
                    t          d| d          }t          j	                            |          rTt          j        t          j	                            |          dd                              d          }	t          j	                            |          dz  }
	 t          j        |dddgd          }t          j        |j        d          |_        |j                                                                        r,|j                                                            d          nd }n# t2          $ r d!}Y nw xY w|                    |                    d"d#          ||	                    d$          |
d%d&           |                    |                    d"d#          d d dd'd&           t          j        |d( d&D             dd)ddd	d
d*d+id,d-d*d.id/d-gd0d1d12          }|||fS )3Nc                 0    g | ]}|d          |d         dS )r7   r8   )Nombrer3    .0rs     r<   
<listcomp>z$actualizar_vista.<locals>.<listcomp>n   s(    MMM8(<<MMM    rA   r   r   r3   leftz6px 12px)	textAlignpaddingboldz#f0f0f0)
fontWeightbackgroundColor
   )r$   columns
style_cellstyle_header	page_sizezSin tickers personalizados.z
text-mutedr   c                 ,    i | ]}|d          |d         S r7   r8   rB   rC   s     r<   
<dictcomp>z$actualizar_vista.<locals>.<dictcomp>v   s"    ;;;q!H+q{;;;rG   c                 @    g | ]}|                     d d          |dS )r*   r)   )labelr&   )r0   )rD   ks     r<   rF   z$actualizar_vista.<locals>.<listcomp>x   s.    RRRq!))C--::RRRrG   
historico_z.csvsUTC)unittzzEurope/Madridi   r   r-   r   )	index_colskiprowsheadercoerce)errorsz%Y-%m-%du   —?r*   r)   z%Y-%m-%d %H:%Mu   ✓ OK)Valoru   Última sesiónActualizadou   Tamaño (KB)Estadou   ⚠ Sin datosc                     g | ]}||d S )rH   rB   )rD   cs     r<   rF   z$actualizar_vista.<locals>.<listcomp>   s     uuu!!1%%uuurG   z5px 10pxfilter_queryu   {Estado} contains "⚠"z#C62828)ifr    u   {Estado} contains "✓"z#2E7D32   native)r$   rP   rQ   rR   style_data_conditionalrS   sort_actionfilter_action)r   r	   	DataTabler   Pr   sortedkeysosr   joinr   existspd	Timestampgetmtime
tz_convertgetsizeread_csvto_datetimeindexnotnaanymaxstrftimer6   appendr0   )r*   extrastabla_extras
extra_dicttodosopciones	filas_csvr7   rutamtimetamdhultima
tabla_csvss                 r<   actualizar_vistar   d   s1      F 
S:'MMfMMM"(33hh5W5WX!'J??$*yII    V9\RRR  <;F;;;J%w%*%ERRF5MMRRRH I&&  w||H&?6&?&?&?@@7>>$ 	L!1!1$!7!7ceLLLWWXghhE'//$''4/C[aVANNN>"(8DDD@B@P@P@T@T@V@Va00<<<\a   S11#)$~~.>?? #"      S11#($ !)      %uu/tuuu!'J??$*yII"$=>SS"$=>SS 
   J :--s   !BG55HHc                    |sdS d t                      D             }i t          |}|                    |          }|sd| dS 	 t          ||           d|                    dd           dS # t
          $ r}d	| cY d }~S d }~ww xY w)
NzSelecciona un valor.c                 ,    i | ]}|d          |d         S rU   rB   rC   s     r<   rV   z%actualizar_manual.<locals>.<dictcomp>   s"    CCC!Qx[!H+CCCrG   zTicker no encontrado para 'z'.r.   r*   r)   z' actualizado correctamente.zError: )r   r   getr   r0   r6   )r*   empresaextrar   r8   r;   s         r<   actualizar_manualr      s      &%%CC/@/B/BCCCE w % EYYwF 98W8888&)))Mws3//MMMM   }}s   )A0 0
B	:B>B	B	)/__doc__ru   dashr   r   r   r   r   r   r	   r
   dash_bootstrap_componentsdbcyfinancer2   pandasrx   databaser   r   r   activosr   	schedulerr   r   register_page__name__	ContainerRowColH4Card
CardHeaderH6CardBodyLabelButtonSpanH5DivDropdownStorelayoutr=   r   r   rB   rG   r<   <module>r      s    
			  Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q ' ' ' '         S S S S S S S S S S       0 0 0 0 0 0 0 0  8*:Q G G G G	TCGk-..f===-   
 CHvwtw=PPPQQCG3CI=>>CIKHHH    CI455CIJGGG    CJ4ycdeee   		Z;YZZZ[[?   
 	 	)   * DG,--DH#v666 CHvwtw6&IIIJJCG3CI233 CL$=OOO    CJ16Gycdeee   		%6B`aaabb	? 	 	 	
 	 	)   " DG-..DH"f555CIa(((g4- 4
 4
 4
n 

F>6""
F:z""	E.*%%	E-!!	E-!!	E.&!!  S S S& 

F
++
F$i00
Fz**	E.&!!	 ;. ;. ;.| 

Fj))	E
Z((	E
#W--	      rG   