
    giX'              
           d dl Z d dlZd dlZ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  ej                  d      Z G d de
      Zdedefd	Zdd
Zdededededef
dZy)    N)FPDF)settingszpdf-generatorc                   .     e Zd Z	 d fd	Zd Zd Z xZS )ExecutiveReportPDFc                 @    t        |   di | || _        || _        y )N )super__init__requester_namerequester_role)selfr   r   kwargs	__class__s       ;/opt/agrota/powerbi/client-mcp/agent/utils/pdf_generator.pyr
   zExecutiveReportPDF.__init__   s%     	"6",,    c                 (   	 t         j                  j                  dd      }t         j                  j                  dd      }t         j                  j                  |      r| j	                  |ddd       t         j                  j                  |      r| j	                  |ddd       | j                  d	d
d       | j                  d       | j                  dddddd       dd l}|j                  d      }t        j                  j                  |      }|j                  d      }| j                  d	dd       | j                  ddd| dddd       | j!                  d       y # t
        $ r"}t        j                  d|        Y d }~d }~ww xY w)NassetszLogoAgrota.jpgzLogoGrupoTerra.webp
            z!No se pudieron cargar los logos: ArialB   r   z"Resumen Ejecutivo Felizia - Agrota   CzAmerica/Guayaquilz%Y-%m-%d %H:%MI   zGenerado el: z
 (Ecuador))ospathjoinexistsimage	Exceptionloggerwarningset_fontset_ycellpytztimezonedatetimenowstrftimeln)r   logo_agrota
logo_terraer*   
ecuador_tznow_ecnow_strs           r   headerzExecutiveReportPDF.header   sH   
	D'',,x1ABKh0EFJww~~k*

;Ar2ww~~j)

:sAr2
 	gsB'

2		!R=q!SI 	]]#67
""&&z2//"23gsA&		!Q-y
;Q3G
#  	DNN>qcBCC	Ds   B&E& &	F/FFc                     | j                  d       | j                  ddd       | j                  ddd| j                          ddd       y )	Nir   r   r   r   r   u   Página r   )r(   r'   r)   page_no)r   s    r   footerzExecutiveReportPDF.footer4   sA    

3gsA&		!R8DLLN#34aC@r   )zJhoana Castilloz
Jefe de TI)__name__
__module____qualname__r
   r6   r9   __classcell__)r   s   @r   r   r      s    ?K-<Ar   r   metricsreturnc                    i }	 | j                         D ci c],  \  }}|j                  d      s|j                  d      s*||. }}}|rzt        j                  d      \  }}|j                         D cg c]  }|d   j                  dd       }}|j                         D cg c]  }|j                  dd	       }}t        d
 |D              r>d	dl	}	|j                         D cg c]!  }t        |	j                  dd|d               # }}|j                  ||dd       |j                  ddd       |j                  dd       t        j                          t!        j"                         }
t        j$                  |
dd       t        j&                          |
j)                  d	       |
j+                         |d<   	 | j                  di       j                  dd	      }| j                  di       j                  dd	      }|d	kD  s|d	kD  rt        j                  d      \  }}dd g}||g}d!d"g}|j3                  ||d#d$|d%d&i'       |j                  d(d       t        j                          t!        j"                         }
t        j$                  |
dd       t        j&                          |
j)                  d	       |
j+                         |d)<   |S c c}}w c c}w c c}w c c}w # t,        $ r#}t.        j1                  d|        Y d}~Vd}~ww xY w# t,        $ r#}t.        j1                  d*|        Y d}~|S d}~ww xY w)+uG   Genera múltiples gráficos para el reporte y retorna un dict de bytes.TRIM__V)   g      @)figsizelabelzVenta  	valor_rawr   c              3   &   K   | ]	  }|d k(    yw)r   Nr   ).0vs     r   	<genexpr>z(create_visualizations.<locals>.<genexpr>H   s     *a16*s   Nz[^\d.]valor_textoz#4A90E2g?)coloralphau&   Tendencia de Ventas (Últimos 3 Meses)r   )fontsizepadz	Monto ($)	   )rO   pngd   )formatdpiventas_trendu    Error en gráfico de tendencia:  VENTAS_UTILIDAD_BRUTA_MAQUINARIA"VENTAS_UTILIDAD_BRUTA_AGROQUIMICOS)r      
Maquinariau   Agroquímicosz#FF9800z#4CAF50z%1.1f%%   rO   r   )labelsautopct
startanglecolors	textpropsu   Distribución UB por Divisióndivision_pieu   Error en gráfico de pastel: )items
startswithendswithpltsubplotsvaluesreplacegetallrefloatsubbar	set_title
set_ylabeltight_layoutioBytesIOsavefigcloseseekreadr$   r%   errorpie)r>   chartskrJ   	trim_datafigaxr\   rg   rk   bufr2   ub_maqub_agrosizesr_   s                   r   create_visualizationsr   ;   s   F=&-mmoddag9NSTS]S]^bScQTd	dll84GC@I@P@P@RS1aj((26SFS5>5E5E5GHaeeK+HFH *6**R[RbRbRdeQ%y"a6F GHeeFF66#F>LLABTVLWMM+M2**,CKKEs3IIKHHQK%(XXZF>"
:?DHHVWX++BBGKKKYZ[A:1ll62GC"O4FW%E+FFF5sSYfprsetFuLL9BLG**,CKKEs3IIKHHQK%(XXZF>" M_ e TH
 f  =7s;<<=.  :4QC899M:sq   K7 K"K"K"1K7 9K(K7 )K-*K7 ,&K2B6K7 	DL& "K7 7	L# LL#&	M/MMc                 B   | j                  ddd       | j                  ||||d       | j                  ddd       | j                  ||||d       | j                  |dz   |dz          | j	                  ddd	       | j                  d
d
d
       | j                  |dz
  d|j                         ddd       | j                  |dz   |dz          | j	                  ddd       | j                  ddd       | j                  |dz
  d|ddd       |r~|dk7  ry| j                  |dz   |dz          | j	                  ddd	       d|v }|r| j                  ddd       d}	n| j                  ddd       d}	| j                  |dz
  d|	 | ddd       | j                  ddd       y) z:Dibuja una tarjeta (card) de estilo ejecutivo para un KPI.   F   D      r   r   r   rS   rY   r   r   r   r      ,   >   P   -      L   <   zv .      q   z^ r   N)set_fill_colorrectset_draw_colorset_xyr'   set_text_colorr)   upper)
pdfxywhtitlevaluevarianceis_negativeicons
             r   draw_kpi_cardr   s   s    sC%HHQ1asC%HHQ1a JJq1ua!eLL#q!sC%HHQUAu{{}aC0 JJq1ua"fLL#r"r2r"HHQUBq!S) HO

1q5!b&!Wc1%XosB+Dr3,DQdVH:.1c:q!Qr   text_conclusionr   r   c           
        K   t        ||      }|j                          |j                  d       |j                  ddd       |j	                  ddd       |j                  d	d
dd       |j	                  d	d	d	       |j                         }| j                  di       j                  dd      }| j                  di       j                  dd      }t        |d|ddd||       | j                  di       j                  dd      }t        |d|ddd|       | j                  di       j                  dd      }	t        |d|ddd|	       | j                  di       j                  dd      }
t        |d|ddd|
       |j                  |d z          t        |       }d	d!l}|j                         }d"|v ru|j                  d#d$%      }|j                  |d"          |j                          |j                  |j                   d|d&'       t#        j$                  |j                          d(|v ru|j                  d#d$%      }|j                  |d(          |j                          |j                  |j                   d)|d&'       t#        j$                  |j                          |j                  |d*z          |j                  ddd       |j	                  d+d,d-       |j                  d	d
d.d       |j	                  d	d	d	       |j                         }| j                  d/i       j                  dd      }t        |d|d-d0d1|       | j                  d2i       j                  dd      }t        |d3|d-d0d4|       | j                  d5i       j                  dd      }t        |d6|d-d0d7|       |j                  |d8z          |j                  d       |j                  ddd       |j'                  ddd       |j	                  d9d9d9       |j                  d	d
d:dd;<       |j	                  d	d	d	       |j                  d       |j                  dd=d       |j)                  d>d?      j+                  d>      }|j-                  d	d@|       t/        |j1                               }d	d!l}|j5                  |      j+                  dA      }t6        j8                  }dBt;        j<                         j>                  d!d
  dC}|dDdE|dF}	 tA        jB                         4 d!{   }t6        jD                  t6        jF                  t6        jH                  dGdH}|jK                  t6        jL                  |dIJ       d!{   }|jO                         j                  dK      }dLdMi}|rdN| |dO<   |jK                  |||dPQ       d!{   }|jQ                          |jO                         j                  dRi       j                  dS      cd!d!d!      d!{    S 7 7 7 X7 # 1 d!{  7  sw Y   y!xY w# tR        $ r} tT        jW                  dT|         | d!} ~ ww xY ww)Uu9   Genera un PDF con diseño de Tablero (Cards + Gráficos).)r   r   r   r   r      4         r   r   zVISTAZO GENERAL DEL PERIODOr   )r/   VENTAS_TOTALES_MESrL   zN/DVENTAS_CRECIMIENTO_MOMr   r   -      zVenta TotalVENTAS_UTILIDAD_BRUTA_MES:   zUtilidad BrutaVENTAS_MARGEN_ACTUALj   Margen"AUTO_DAME_EL_PESO_DEL_ROL_SOBRE_UB   zPeso Rol/UB#   NrV   Fz.png)deletesuffixZ   )r   r   r   ra   i   A   r   r   r   u    EXPOSICIÓN FINANCIERA (CARTERA)CARTERA_SALDO_TOTAL_ACTUAL   zCartera TotalCARTERA_VALOR_VENCIDO_ACTUALK   zCartera VencidaAUTO_DAME_EL_RCCr[   u   RCC (Días)    r   u     ANÁLISIS ESTRATÉGICOT)r/   fillrF   latin1rh   r   zutf-8Dashboard_Ejecutivo_z.pdfzapplication/pdfzexecutive-reports)base64contentTypefolderfileNamepassword)usernamer   	client_id
grant_typeg      .@)datatimeoutaccess_tokenzContent-Typezapplication/jsonzBearer Authorizationg      N@)jsonheadersr   payloadr    u   ❌ Error al subir PDF: ),r   add_pager/   r'   r   r)   get_yri   r   r(   r   tempfileNamedTemporaryFilewriteru   r#   namer   unlinkr   encodedecode
multi_cellbytesoutputr   	b64encoder   UPLOAD_DOCUMENT_URLuuiduuid4hexhttpxAsyncClientKEYCLOAK_USERNAMEKEYCLOAK_PASSWORDKEYCLOAK_CLIENT_IDpostKEYCLOAK_TOKEN_URLr   raise_for_statusr$   r%   rx   )!r>   r   r   r   r   curr_yv_totalv_varub_totalmargenpeso_rolrz   r   
y_graficostmp	y_carterac_total	c_vencidarcc
clean_text	pdf_bytesr   
pdf_base64
upload_url	file_namepayload_jsonclient	auth_data	auth_resptokenr   responser2   s!                                    r   %generate_and_upload_executive_summaryr     s     N>
ZCLLN FF1ILL#r"r3$HHQ0QH7q!QYY[F kk.377uMGKK0"599-ME#r62r='5I {{6;??uUH#r62r+;XF [[/488NF#sFBHf= {{?DHHX]^H#sFBM8DIIfrk #7+FJ))v)F		&()				#((bJ"	5
		#(())v)F		&()				#((cZ2	6
		#((IIj2o LL#r"sB#HHQ5!H<q!Q		Ikk6;??uUG#r9b"owG :B?CCMSXYI#r9b".?K ++("
-
1
1-
GC#sIr2}cBIIi"n FF1ILL#r"r3$sC%HHQ-!$H?q!QFF1ILL"b! '')<CCHMJNN1a$ cjjl#I!!),33G<J--J&tzz|'7'7';&<DAI (%	L$$& 	B 	B& %66$66%88(	I %kk(*E*EI_ckddINN$((8E%'9:G-4UG+<(#[[,PWae[ffH%%'==?&&y"599&A#	B 	B 	B e g	B 	B 	B 	B$  /s34s   TY!X6 X X6 #AX!:X;A	X!XAX!X6 XX6 Y!X6 X!X!X6 !X3'X*(X3/X6 2Y!3X6 6	Y?YYY!)N)r   r   r   loggingr,   rr   matplotlib.pyplotpyplotre   fpdfr   config.settingsr   	getLoggerr%   r   dictr   r   strr  r   r   r   <module>r     s    	     	   $			?	+*A *AZ54 5D 5p  F~~$'~9<~NQ~~r   