
    
j9.                        d dl Zd dlm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mZmZmZmZ d dlmZ d dlmZ  ej        eddd	           d
Zd Zd Zd Z ej         d ej!        d ej"         e	j#        d          d          g           ej!        dd           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 e            d           gd!"           ej"         ej*        d#           ej+        d$d%d&d'd(d)d'gd&d*          gd+"           ej"         ej*        d,           ej
        d-d.ej,        -                                .                    d/          0          gd"           ej"         ej*        d1           ej
        d2d3d d45          gd+"           ej"         ej*        d6           ej
        d7d3d d8d9:          gd"           ej"         ej*        d;           ej
        d<d3d d d=>          gd+"           ej"         ej*        d?           ej
        d@dAdBC          gd"          g           ej!        dD ej"         ej/        dEdFdGd H          d           ej"         e	j0        dIdJ                    g          g          g           e	j$        dK           e	j%        dLd           e	j$        dM           ej1        dNdOdPiQ           ej2        dRd S           ej3        dTdUd V          gW          Z4 e edRdX           edIdY           e
dFdZ           edd[           ed$d[           ed-d[           ed2d[           ed7d[           ed<d[           ed@d[           edRdX          d\          d]             Z5 e eddY           eddY           edNd^           edLdY           e
dRdX           e
dTd_                    d`             Z6da Z7db Z8dS )c    N)dcchtmlInputOutputStatecallback
dash_table	no_update)   añadir_transaccioneliminar_transaccionget_transaccionesget_posiciones)ACTIVOS)get_tickers_extraz/carterazCartera Real   )pathnameorderrealc                  z    d t                      D             } i t          | }d t          |          D             S )Nc                 ,    i | ]}|d          |d         S nombreticker .0rs     '/var/www/html/bolsaweb/pages/cartera.py
<dictcomp>z$opciones_empresa.<locals>.<dictcomp>   "    CCC!Qx[!H+CCC    c                 @    g | ]}|                     d d          |dS )_ labelvalue)replace)r   ks     r   
<listcomp>z$opciones_empresa.<locals>.<listcomp>   s.    NNN1aiiS))A66NNNr"   )r   r   sorted)extratodoss     r   opciones_empresar/      sE    CC/@/B/BCCCE w % ENNuNNNNr"   c                 6   t          j        |           }	 |                    d          }|j        s t	          |d         j        d                   S n# t          $ r Y nw xY w	 |j        j        }|r|dk    rt	          |          S n# t          $ r Y nw xY wd S )N2d)periodCloser   )	yfTickerhistoryemptyfloatiloc	Exception	fast_info
last_price)r   tdfps       r   precio_actualrA      s    
	&AYYdY##x 	/G)"-...	/   K" 	Q88O   4s#   <A 
A! A!%"B	 	
BBc                  2   d t                      D             } i t          | }t          t                    }g }d}d}|D ]}|                    |d         d          }|rt          |          nd }|d         }	|d         }
|	r|
|	z  nd}|r||	z  nd }|||
z
  nd }|
|
r||
z  dz  nd }||
z  }|r||z  }|                    |d                             dd	          |	d
|dd|r|ddnd|r|ddnd||ddnd||ddndd           |||fS )Nc                 ,    i | ]}|d          |d         S r   r   r   s     r   r    z.construir_tabla_posiciones.<locals>.<dictcomp>,   r!   r"   r   empresa cantidad_netacoste_totald   r$   r%   z.0f.3f    €u   —,.2f+,.2f+.2f%)EmpresaCantidadzPrecio mediozPrecio actualValor actualu   P&L €zP&L %)r   r   r   MODOgetrA   appendr)   )r-   r.   
posicionesfilastotal_invertidototal_valorpos
ticker_sympvcantidadrG   precio_mediovalor_actualplpl_pcts                  r   construir_tabla_posicionesra   +   s   CC/@/B/BCCCE w % E%%JEOK  YYs9~r22
*4>]:&&&$'-(19@{X--q(*4rH}}-9-El[((4.0nn"{"S((SW;& 	(<'K9~--c377#))+555502=_____:FQ|66666E,.N"(((((*0*<&&&&&%
 
 	 	 	 	 /;..r"   Tz	mt-3 mb-3auto)width)	classNamechildrenzcartera-resumenzmb-4 g-3)idrd   zPosiciones abiertaszcartera-tabla-posicioneszmb-4u   Registrar operaciónzmb-0rd   zg-2rO   z
ct-empresaF)rf   options	clearable   mdTipozct-tipoCompracomprar&   Ventaventa)rf   rh   r(   ri      Fechazct-fechadatez%Y-%m-%d)rf   typer(   zCantidad (acciones)zct-cantidadnumber100)rf   ru   minplaceholderu   Precio (€/acc)z	ct-preciogMbP?z5.23)rf   ru   rx   stepry   u   Comisión (€)zct-comisiong{Gz?)rf   ru   rx   r(   rz   Notaszct-notastextOpcional)rf   ru   ry   zmt-3	Registrarz
ct-btn-addprimary)rf   colorn_clickszct-msgz!text-muted ms-3 align-self-centerzHistorial de operacioneszcartera-tabla-historialu"   Evolución del valor de la carterazcartera-grafica-evolucionheight40vh)rf   stylezcartera-refresh)rf   datazcartera-intervali )rf   intervaln_intervals)fluidre   r   re   r   r(   )prevent_initial_callc	                 z   t          |||||g          s	t          dfS d t                      D             }	i t          |	}
|
                    ||          }t          t          ||||t          |          t          |          t          |pd          |pd	  	         |pddz   d|                                 dfS )Nz&Rellena todos los campos obligatorios.c                 ,    i | ]}|d          |d         S r   r   r   s     r   r    z'registrar_operacion.<locals>.<dictcomp>   r!   r"   r   rE   rr   u   ✓ z registrada.)	allr
   r   r   rS   r   rR   r9   
capitalize)r$   rD   tipofechar\   preciocomisionnotasrefreshr-   r.   r   s               r   registrar_operacionr   ~   s     uh788 CBBBCC/@/B/BCCCE w % EYYw((FgvtUE(OOUSY]]\abjbono\p\prwr}{}~~~LqAEdoo&7&7EEEEEr"   figurer   c           
         t                      \  }}}||z
  }|r||z  dz  nd}|dk    rdnd}t          d|ddd          t          d	|ddd          t          d
|dd|dd|          g}|rAt          j        ||rd |d         D             ng dddddddddiddddiddgd          nt	          j        dd          }	t          t                    }
|
r3t          j        d  |
D             d! d"D             dd#d$dddd%&          nt	          j        d'd          }	 t                      }n:# t          $ r- t          j                    }|                    d(d)*           Y nw xY w|	|||fS )+NrH   r   z#2E7D32z#C62828zCapital invertidorK   rJ   #1565C0rQ   z	P&L totalrL   u    €  (rM   z%)c                     g | ]}||d S )r   rf   r   r   cs     r   r+   z$actualizar_vista.<locals>.<listcomp>   s     888!!1%%888r"   rightz6px 12px	monospace)	textAlignpadding
fontFamilyboldz#f0f0f0)
fontWeightbackgroundColorfilter_queryu   {P&L €} contains "+")ifr   u   {P&L €} contains "-"   )r   columns
style_cellstyle_headerstyle_data_conditional	page_sizezSin posiciones abiertas.z
text-mutedrg   c           	          g | ]]}|d          |d                              dd          |d                                         |d         |d         dd|d	         d
dd^S )r   rD   r$   r%   r   r\   r   rI   rJ   r   z.2frs   rO   rm   rP   Preciou	   Comisión)r)   r   )r   r>   s     r   r+   z$actualizar_vista.<locals>.<listcomp>   s         wZAiL,@,@c,J,JfI((***8....*=W=W=W=W
 
   r"   c                     g | ]}||d S r   r   r   s     r   r+   z$actualizar_vista.<locals>.<listcomp>   s     ooo!!1%%ooor"   r   z5px 10px)r   r   
   )r   r   r   r   r   zSin operaciones registradas.plotly_whiteu   Sin datos de evolucióntemplatetitle)ra   _tarjetar	   	DataTabler   Pr   rR   _grafica_evolucionr;   goFigureupdate_layout)r   	_intervalrV   	total_inv	total_valpl_totalr`   r   tarjetastablatrans
tabla_histfigs                r   actualizar_vistar      s\    #=">">E9i9$H+4;X	!C''!F!QIIIE 	$&=&=&=&=yIII!8!8!8!8)DDGGGGGGGOOH  

OJ <AI88uQx8888r!(Z{[[$*yII"$<=	RR"$<=	RR 
 
 
 
 
 F5NNN 
 d##E 

S%  	  
 po/nooo!(Z@@$*yII
 
 
 
 F9\RRR T "" T T Tikk>9RSSSSST (C++s   )D8 84E/.E/c                     t          j        t          j        t          j        t	          j        | d          t	          j        |d|i          g                    d          S )Nztext-muted mb-1 smallrg   r   )r      rk   )dbcColCardCardBodyr   r   H5)titulovalorr   s      r   r   r      sk    738CLv!8999gu-...*        r"   c                     d t                      D             } i t          | }t          t                    }|s,t	          j                    }|                    dd           |S t          j        |          t          j	        d                   d<   
                    d          ddl}ddl}|j                            |j                            |j                            t                               d          }d	                                         }i }|D ]}	|j                            |d
|	 d          }
|j                            |
          r	 t          j        |
dddgd          }t          j	        |j        d          |_        d|j        v rdnd}t          j        ||         d                                          }|                    d                                          ||	<   # t4          $ r Y w xY w|s,t	          j                    }|                    dd           |S t7           t9                      j        d |                                D                        }fd|D             }g }|D ]}d         |k             }d}|                    d	          D ]\  }	}||d         dk             d                                         ||d         dk             d                                         z
  }|dk    rR|	|v rN||	         }|j        |j        |k             }tA          |          r!||tC          ||d                            z  z  }|"                    |           t	          j        t	          j#        ||ddtI          dd          d !                    }|                    dd"tI          d#d$d%d%&          d'(           |S ))uB   Reconstruye el valor de la cartera día a día sumando posiciones.c                 ,    i | ]}|d          |d         S r   r   r   s     r   r    z&_grafica_evolucion.<locals>.<dictcomp>   r!   r"   r   z	Sin datosr   r   r   Nr   rD   
historico_z.csvrr   r   )	index_colskiprowsheadercoerce)errorsz	Adj Closer3   )levelu   Sin históricos disponiblesc                     g | ]	}|j         
S r   )index)r   ss     r   r+   z&_grafica_evolucion.<locals>.<listcomp>   s    %M%M%M!ag%M%M%Mr"   c                 P    g | ]"}|d                                           k     |#S )r   )rx   )r   ddf_ts     r   r+   z&_grafica_evolucion.<locals>.<listcomp>   s3    DDD1W0A0A0C0C+C+C!+C+C+Cr"   r   ro   r\   rq   r4   tozeroyzrgba(33,150,243,0.1)r   )r   rc   zValor cartera)xyfill	fillcolorliner   z	x unified(   r      )lr   r>   bu   Valor (€))r   	hovermodemarginyaxis_title)%r   r   r   rR   r   r   r   pd	DataFrameto_datetimesort_valuesosglobr   joindirname__file__uniqueexistsread_csvr   r   
to_numericdropnagroupbylastr;   r,   setunionvaluessumlenr9   rT   Scatterdict)r-   r.   r   r   r   _globDATA_DIRempresasprecios_histemprutadhcolr   
idx_globalvalor_serier   	ops_hasta	valor_diagrpr\   serieidx_dispr   s                          @r   r   r      s(   CC/@/B/BCCCE w % Ed##E ikk>EEE
<DN4=11DMG$$Dw||BGOOBGOOH,E,EFFOOHI%%''HL 
 
w||H&<3&<&<&<==7>>$ 	[aVANNN>"(8DDD%0BJ%>%>kkGM"S'(;;;BBDD$%IIAI$6$6$;$;$=$=S!!   	  ikk>9VWWW
%M%M|7J7J7L7L%M%M%MNOOJDDDDZDDDJK & &g%/0		!)))44 		G 		GHCCK8+,Z8<<>>c&kW,-j9==??@  !||| 3 3$S) ;u{e';<x== GE%2E,F,F!FFI9%%%%
)BJ
"8	+++	    C bB"+++!	     Js   B H  
HH)9pandasr   plotly.graph_objectsgraph_objectsr   yfinancer5   dashr   r   r   r   r   r   r	   r
   dash_bootstrap_componentsr   databaser   r   r   r   activosr   r   register_page__name__rR   r/   rA   ra   	ContainerRowr   H4r   Divr   
CardHeaderH6r   LabelDropdown	TimestamptodaystrftimeButtonSpanGraphStoreIntervallayoutr   r   r   r   r   r"   r   <module>r,     sS       ! ! ! ! ! !      Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q ' ' ' '                  & & & & & &  8*> K K K KO O O  "!/ !/ !/H 
TCGk''v666-   
 CG J777 DG!""DH*f=== CHvwtw5HHHIICGe9--|s||UeUeUgUgsx/y/y/yz  @A  B  B  B6**LCLIZbmuPvPv  CJ  U\  y]  y]  P^  fn  z  -@  -@  -@  A  FG  H  H  H7++YSY*6Y[YeYkYkYmYmYvYv  xB  ZC  ZC  .D  .D  .D  E  JK  L  L  L#899939\djky~;;;  A  FG  H  H  H#566		[W_efmr  AG  9H  9H  9H  I  NO  P  P  P#455ysyMX`fgopw{7|7|7|}  CD  E  E  E7++YSY*6_i-j-j-jkpqrrr/    CGf

;<y[\]]]eklll		X9\]]]^^0   
 	 	)   ( DG&''DH)V<<< DG011CI,Xv4FGGGCI"+++CL&JJJS*- *
 *
 *
^ 

Ff%%
F8Z  	E,
##	E,  	E)W	E*g	E-!!	E+w	E-!!	E*g	E
V$$  F F F 

F%z22
Fj))
F&11
F$j11	E
V$$	E
m,, ,, ,, ,,^  D D D D Dr"   