o
    75i                     @   sf   d Z ddlmZ ddlmZ ddlmZ ddl	Z
ddlmZ ddlmZ dd Zd	ed
efddZdS )u#   콤보 차트 (막대 + 선) 생성    )BytesION   )	ChartData)CHART_COLORSc               	   C   sT   g d} | D ]}zt j|dd |tjd< |W   S  ty"   Y qw dtjd< dS )u   일본어 폰트 설정)zNoto Sans CJK JPZ	IPAGothicZ
IPAPGothicZTakaoPGothicz
VL PGothiczDejaVu SansF)Zfallback_to_defaultzfont.familyz
sans-serif)fmZfindfontpltZrcParams	Exception)Zfont_candidatesfont r
   ^/var/www/tkim.planitai.co.jp/gemegg/20251207-make-pdf-report/project/src/charts/combo_chart.pysetup_japanese_font   s   	


r   
chart_datareturnc                 C   s  t   tjdd\}}| j}tt|}d}dd | jD }dd | jD }| d }t|D ]J\}	}
|
	dg }|
	d	t
|	tt
  }|
	d
d|	d  }|j|| t|dkrd|	| t| nd |t|dkrs|t| n|||dd q0|d |jdt
d d |jdt
d d || |j|ddd |jtdd  |r| }t|D ]<\}	}
|
	dg }|
	d	t
t||	 tt
  }|
	d
d|	d  }|
	dd}|j||||dd|rdnd dd! q|jd"t
d d |jdt
d d |jtd#d  | \}}|r,| \}}|j|| || d$d%d& n|jd$d%d& | jr@tj| jd'd(d) |jdd*d+ |d, t  t }tj|d-d.d/d0 |d t| |S )1u   콤보 차트 생성 (막대 + 선)

    Args:
        chart_data: 차트 데이터

    Returns:
        PNG 이미지 바이트 버퍼
    )
      )Zfigsizegffffff?c                 S      g | ]}| d dkr|qS )typebarget.0dr
   r
   r   
<listcomp>5       z&create_combo_chart.<locals>.<listcomp>c                 S   r   )r   liner   r   r
   r
   r   r   6   r   r   datacolorlabelzBar    r   g?)r   r   alpha u   金額)r   y)axisZ
labelcolor-   right)rotationhac                 S      | dkr| d ddS dS Nr   i'  z.0fu   万0r
   xpr
   r
   r   <lambda>P       z$create_combo_chart.<locals>.<lambda>zLine dashedFo   z---)r   r   markerZ
markersizeZ	linestyleZ	linewidthu   利益c                 S   r(   r)   r
   r+   r
   r
   r   r.   j   r/   z
upper left   )locfontsize   bold)r7   Z
fontweightg333333?)r#   r    TZpng   Ztight)formatdpiZbbox_inches) r   r   ZsubplotslabelsnpZarangelendatasets	enumerater   r   r   Z
set_xlabelZ
set_ylabelZtick_paramsZ
set_xticksZset_xticklabelsZyaxisZset_major_formatterZFuncFormatterZtwinxZplotZget_legend_handles_labelsZlegendtitlegridZset_axisbelowZtight_layoutr   Zsavefigseekclose)r   Zfigax1r=   r,   widthZbar_datasetsZline_datasetsZ
bar_offsetiZdatasetr   r   r   Zax2r0   Zlines1Zlabels1lines2Zlabels2bufferr
   r
   r   create_combo_chart$   s   	
&
	
 



rK   )__doc__ior   Zmatplotlib.pyplotZpyplotr   Zmatplotlib.font_managerZfont_managerr   Znumpyr>   data_modelsr   Z
pdf.stylesr   r   rK   r
   r
   r
   r   <module>   s    