3i!dZddlZddlmZmZmZmZmZmZm Z m Z m Z ddl m Z ddlmZddlmZmZmZej(eZGddeZy) z{ Analytics Tab - Portfolio Analytics Dashboard. Displays performance metrics, allocation, risk metrics, and top holdings. N) QWidget QVBoxLayout QHBoxLayout QGroupBoxQLabel QTableWidgetQTableWidgetItem QHeaderView QGridLayout)Qt)QColor)format_currencyformat_percentage color_for_pnlcFeZdZdZfdZdZdZdZdZdZ dZ xZ S) AnalyticsTabzAnalytics dashboard tab.cpt|||_|j|j y)zb Initialize analytics tab. Args: parent: MainWindow instance N)super__init__parentinit_ui load_data)selfr __class__s C/mnt/ssd/data/python-lab/portfolio-manager/src/gui/analytics_tab.pyrzAnalyticsTab.__init__s*    cz t|}td}t|}td|_td|_td|_td|_|jtddd|j|jdd|jtddd|j|j dd|jtdd d|j|j d d|jtd d d|j|jd d|j|td }t|}t}|jtd t|_ |j|j|j|j|t}|jtdt|_ |j|j|j|j||j|td}t|} t|_t|_t|_t|_| j|j| j|j| j|j | j|j"|j|td} t| } t%|_|j&j)d|j&j+gd|j&j-d|j&j/d|j&j1} | j3dt4j6j8| j3dt4j6j:| j3d t4j6j:| j3d t4j6j:| j|j&|j| |jy)zInitialize user interface.u📊 PERFORMANCEu€ 0.00u+€ 0.00 (+0.0%)zTotal Invested:rzCurrent Value:z Total P&L:z Dividends:u📈 ALLOCATIONzBy Type:zBy Geography:u⚠️ RISK METRICSu📌 TOP 5 HOLDINGS)Tickeru Value €zWeight %zP&L %TN)rrr r lbl_invested lbl_currentlbl_pnl lbl_dividends addWidgetrlbl_alloc_type addStretch addLayout lbl_alloc_geolbl_max_holdinglbl_stock_conc lbl_etf_conclbl_diversificationr table_topsetColumnCountsetHorizontalHeaderLabelssetMaximumHeightsetAlternatingRowColorshorizontalHeadersetSectionResizeModer ResizeModeStretchResizeToContents) rlayout perf_group perf_layout alloc_group alloc_layout type_layout geo_layout risk_group risk_layout top_group top_layoutheaders rrzAnalyticsTab.init_ui$sT"12 !*- ":.!*-12 #J/f%67A>d//A6f%561=d..15f\2Aq9dllAq1f\2Aq9d00!Q7$ 12 ";/ "m f%678$hd112 {+!] V$:;<#XT//0z*%45 !*- %x$h"H#)8 d223d112d//0d667$34  + % %%a( 002   '', ..t4002##A{'='='E'EF##A{'='='N'NO##A{'='='N'NO##A{'='='N'NOT^^,#rctjd |jjj |j |j |j|jtjdy#t$r$}tjd|dYd}~yd}~wwxYw)z Load and display analytics data.zLoading analytics data...z"Analytics data loaded successfullyzError loading analytics: T)exc_infoN) loggerdebugr portfolio load_holdingsupdate_performanceupdate_allocationupdate_risk_metricsupdate_top_holdingsinfo Exceptionerror)res rrzAnalyticsTab.load_data~s 01 I KK ! ! / / 1  # # %  " " $  $ $ &  $ $ & KK< = I LL4QC84L H H IsA9B B>B99B>c|jjj}|jj t |d|j j t |d|d}|d}t |dt|d}t|}|jj ||jjd|d|jj t |d y ) zUpdate performance section.total_invested current_valuetotal_pnl_amounttotal_pnl_percentz ()color: ; font-weight: bold;total_dividendsN) r analyticsget_performance_summaryr$setTextrr%rrr& setStyleSheetr')rperf pnl_amount pnl_percentpnl_text pnl_colors rrMzAnalyticsTab.update_performances{{$$<<> !!/$7G2H"IJ   o1F!GH,- ./ %j12"5F{5S4TTUV!*-  X& ""WYK7K#LM ""?48I3J#KLrc|jjj}d}t|j ddD]\}}|d|d|ddz }|j j ||jjj}d}t|j d dD]\}}|d|d|ddz }|jj |y ) zUpdate allocation section.c |dSNrxs rz0AnalyticsTab.update_allocation..s 1Q4rT)keyreverseu• z: .1fz% c |dSrjrkrls rrnz0AnalyticsTab.update_allocation..s 1rN) rr^get_allocation_by_typesorteditemsr)r`get_allocation_by_geographyr,)r alloc_type type_text asset_typeweight alloc_geogeo_text geographys rrNzAnalyticsTab.update_allocations[[**AAC  "()9)9);Y]"^ > J 4 |2fS\= =I > ##I.KK))EEG !' (9~W[!\ < Iv $ykF360%z#dc3545warningu ⚠️ >40%z#ffc107z#28a745r[r\zStock Concentration: stock_concentration%zETF Concentration: etf_concentrationzDiversification: diversification_scorez.0fz/100 ( assessmentz) - effective_holdingsz effective holdingsN) rr^get_risk_metricsget_diversification_scorer-r`rar.r/r0) rriskdiversification max_ticker max_weight warning_levelmax_text max_colordiv_texts rrOz AnalyticsTab.update_risk_metricssv{{$$557++//IIK"&&:!; J45 )*S)9ZLJ H $  &H!I i '  &H!I!I $$X. **WYK?S+TU ##&;DAVrsL  RR   8 $]57]5r