
    oGj                        d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZmZmZmZmZ  ee          j        j        dz  Zdad#dZd$dZ d%dZ!d&d"Z"dS )'u   PDF-звіт відповідності ШТУ — ReportLab з кириличним шрифтом.

Перед першим використанням запустіть: python migrations/setup_fonts.py
    )annotationsN)date)Path)colors)A4)ParagraphStylegetSampleStyleSheet)cm)
pdfmetrics)TTFont)	ParagraphSimpleDocTemplateSpacerTable
TableStylefontsFreturnNonec                 |   t           rd S t          dz  } t          dz  }|                                 st          d|  d          t	          j        t          dt          |                                t	          j        t          dt          |                               t	          j        ddd           da d S )	Nz	Arial.ttfzArial-Bold.ttfzFont not found: z'. Run: python migrations/setup_fonts.pyArial
Arial-Bold)normalboldT)	_REGISTERED
_FONTS_DIRexistsFileNotFoundErrorr   registerFontr   strregisterFontFamily)regularr   s     export/pdf.py_register_fontsr#      s     ;&G((D>> 
OwOOO
 
 	
 F7CLL99:::F<T;;<<<!''MMMMKKK    dict[str, ParagraphStyle]c            
         t                      } t          d| d         ddd          t          d| d         dd	d
          t          d| d         ddd          t          d| d         ddd	          dS )NCyrTitleTitler         )parentfontNamefontSizeleadingCyrH2Heading2      CyrBodyNormalr   
      CyrSmall	   )titleh2bodysmall)r	   r   )bases    r"   _stylesr>   .   s      D
4=<bdnpqqqWT*-=_akmnnnyh'\^hjkkk
4>G^_iklll	  r$   level
int | Noner   c                B    dddd}| r|                     | d          ndS )Nu   Рівень 1u   Рівень 2u   Рівень 3)         u   Не сертифіковано)get)r?   labelss     r"   _level_labelrG   8   s3    !&6;KLLFCHo6::e>???Noor$   companyassessment_dater   expert
str | Nonecertification_levelclass_results
list[dict]nonconformitiesbytesc                
   t                       t                      }t          j                    }t	          |t
          dt          z  dt          z  dt          z  dt          z  d|  |pd          }g }	|	                    t          d|d                              |	                    t          dd	t          z                       |	                    t          d
|  |d                              |	                    t          d| |d                              |	                    t          d|pd |d                              |	                    t          dt          |           |d                              |	                    t          ddt          z                       |	                    t          d|d                              |	                    t          ddt          z                       g dg}
|D ]@}|
                    |d         |d         |d          d|d          |d         dg           At          |
dt          z  dt          z  dt          z  dt          z  g           }|                    t          d!d"d#t          j        d$          fd%d"d#t          j        fd&d'd(d)d*d+t          j        t          j        gfd,d"d+d-t          j        fd.d/d0d1g                     |	                    |           |	                    t          ddt          z                       |	                    t          d2|d                              |	                    t          ddt          z                       |s+|	                    t          d3|d                              n"g d4g}|D ]M}|                    |d5         t'          |d6                   t'          |d7                   |d8         g           Nt          |dt          z  dt          z  d9t          z  d:t          z  g           }|                    t          d!d"d#t          j        d;          fd%d"d#t          j        fd&d'd<d)d*d+t          j        d=          t          j        gfd,d"d+d-t          j        fd>d/d?d@dAg                     |	                    |           |	                    t          ddBt          z                       |	                    t          dCt)          j                     |dD                              |                    |	           |                                S )EuJ   Будує PDF §С.7 і повертає bytes для st.download_button.rC   g      @u   Звіт ШТУ —  )pagesize
leftMarginrightMargin	topMarginbottomMarginr9   authoru?   Звіт оцінювання відповідності ШТУr9   rB   g333333?u   <b>Компанія:</b> r;   u&   <b>Дата оцінювання:</b> u   <b>Експерт:</b> u   —u.   <b>Рівень сертифікації:</b> g      ?u;   Індекси відповідності по класахr:   g?)u   Класu
   Назваu   Виконано / Всьогоu   Індексclassnamemetz / totalindexz.1%g      ?      rD   )	colWidths
BACKGROUNDr   r   r   z#2c5f8a	TEXTCOLOR)FONTNAMErb   rc   r   )rf   r   rB   rd   rd   r   )FONTSIZErb   rh   r8   ROWBACKGROUNDSrg   rh   GRIDg?)ALIGN)rC   r   rh   CENTER)VALIGNrb   rh   MIDDLE)
TOPPADDINGrb   rh   r_   )BOTTOMPADDINGrb   rh   r_   u   Невідповідностіu7   Невідповідностей не виявлено.)u   Кодu   Критичністьu   Термін усуненняu   Рекомендаціяcodeseveritydeadlinerecommendationg      @g      @z#8a2c2c)ri   rb   rh      z#fff5f5)rl   )rB   r   )rC   rd   rm   )rp   rb   rh   rD   )rq   rb   rh   rD   )WORDWRAP)rD   rB   )rD   rd   Tg?u   Звіт сформовано: r<   )r#   r>   ioBytesIOr   r   r
   appendr   r   rG   r   setStyler   r   HexColorwhite
whitesmokegreyr   r   todaybuildgetvalue)rH   rI   rJ   rL   rM   rO   stbufdocstorytbl_datarowtblnc_datancnc_tbls                   r"   generate_pdfr   =   s2    	B
*,,C
r6q2v(R.W..|  C E 
LL\^`ah^ijjkkk	LL38$$%%%	LL@w@@"V*MMNNN	LLUOUUWYZ`Wabbccc	LLFV_uFF6
SSTTT	LLoLYlLmLmooqstzq{||}}}	LL38$$%%% 
LLXZ\]aZbccddd	LL38$$%%%]]]^H n nWs6{s5z4T4Tc'l4T4TY\]dYeVkVklmmmm
S2Xq2vq2vq2v$F
G
G
GCLL	vw	(B(BC	fgv|43/)	68f.?-NO	34-.+.      
LL	LL38$$%%% 
LL;RXFFGGG	LL38$$%%% YXZ\]cZdeefffftttu! 	i 	iBNNBvJBzN(;(;SJ=P=PRTUeRfghhhhw1r638S2XsRx*PQQQ
67FOI,F,FG&'6<873-vx&/)2L2Lfl1[\VXsFK802/2/$
   	 	 	 	V	LL38$$%%%	LLKTZ\\KKRPW[YYZZZIIe<<>>r$   )r   r   )r   r%   )r?   r@   r   r   )rH   r   rI   r   rJ   rK   rL   r@   rM   rN   rO   rN   r   rP   )#__doc__
__future__r   rx   datetimer   pathlibr   reportlab.libr   reportlab.lib.pagesizesr   reportlab.lib.stylesr   r	   reportlab.lib.unitsr
   reportlab.pdfbaser   reportlab.pdfbase.ttfontsr   reportlab.platypusr   r   r   r   r   __file__r+   r   r   r#   r>   rG   r    r$   r"   <module>r      s    # " " " " " 				                         & & & & & & D D D D D D D D " " " " " " ( ( ( ( ( ( , , , , , ,              T(^^")G3
   "   p p p p
X X X X X Xr$   