o
    
j]E                     @   sX   d Z ddlZddlZddlmZ ddlmZmZ e	e
Z	ddededdfd	d
ZdS )z[PDF-Rechnungserstellung via ReportLab (Platypus). Standalone, kein Excel, kein LibreOffice.    N)escape)_AV_KONSTANTENMitgliedmitgliedoutput_pathreturnz
str | Nonec           K         s>  z6ddl m} ddlm ddlmm} ddlm}m	} ddl
m ddlm}m}m}	mm}
m}m} W n tyE   td Y d	S w | |}|jdk}|jdk}d
t| jd| jdd d
 }z|}W n ty}   d}Y nw | jd| jdd   }|dk}| jd| jdd}| jd| jdd}| jd| jdd}| jd| jdd}t| jdd }t!d }t!d }t!d }t!d  }t!d! }t!d" }|d	u rt"j#$| j%d#|j& d$|j' d%}t"j#(|}|||d& d' d' d( d)|d*  d+}|d d,  fd-d.d/d0d1d2d3d4} d5d6|d7}!d8d6d3|d9}"d:d;d3d<d=d>d;d<d?d@d1d2dAd4}#dBdCdD|d9}$dfdFdG	dH dIg }%d}&dJD ]B}'| j|'d}(|(rt"j#)|(st"j#$| j*dK|(}(|(rt"j#+|(rz||(dL d' dMdN}&W n
 ty   Y nw  nqt| jdOdP   dQk})| jdRd }*t,|dS  dTt,|dU  }+|)s|*r|+dVt,|* 7 }+dWt,|dX  dYdZd[d<||d\|+d]d1d3|d2d^g},||&|,ggd_ d_ gd`}-|--|	dadbdcddde fdfdcddd_dgfg |%|-|
dhdi g7 }%djt,|dX  dkt,|dS  dkt,|dU  dl}.|.dWt,|dm  dYt,|dn t,|do  dpt,|dq  g}/|drr|/.dst,|dr  |  |dtdE}0|0rdundv}1dw|"dWt,|d*  dY|!gdx|"t,|dy |!g|1|"t,|dz |!gg}2||2d{ d| gd`}3|3-|	g d} ||/|3ggd~ d gd`}4|4-|	dag |%|4|
dhd g7 }%|%.|dddd[d|d(d |%.|
dhde  |0rBt,|d  dpt,|d  d}5nt,|d  dpt,|d  d}5|%.|5 |%.|
dhde  ddd;d2|d}6ddd;d2||d}7dd6|d7d|6d|6d|7d|7d|7ggddcd|fdddddgdh fdd}8fdd}9|r|8d|d   |dr|9d|d  d|d  |d |d |d  |9dddd|d  n|9d|d  d|d  |d |d |d  |rd|8d|d   |dr=|9d|d  d|d  |d |d d|d   |9ddddd|d   n'|9d|d  d|d  |d |d |d  |drd|9dddd|d  .dddd[dddddWt,|d  dddd[||dčg ddfdƈffddfdȈfdhdɃfdfdfdȈfd|fddfdȈfdefdbdfdȈfdefg7 fdd̈́dD }:||:d`};|;-|	 |%|;|
dhdψ g7 }%dD ]\}<}=||<d}>|>r|%.|= dt,|> |# q|%.|
dhd҈  |dv }?|?r&|%.dԈdd[d|d׍ |%.|
dhdʈ  g }@|r|?rt,||r;dt,| nd }A|0rCdnd}B|0rJdnd}C|BdWt,| dt,|dX  fdt,|fdt,|fd|Afdt,|fdt,|d fdt,|dz  d|C dfg}@nl|?rt,||rdt,| nd }Dd$t/d	| jdd | jdd g}E|0rdnd}B|0rdnd}C|BdWt,|dX  dYfdt,|fdt,|Efd|Dfdt,|fdt,|d fdt,|dz  d|C dfg}@|?r/|@r/fdd̈́|@D }F||Fd{ d{  gd`}G|G-|	ddcdddfddcddd_dfdddddag |%.|G |dX  dk|dS  dk|dU  |\}Hd& d' 
d< 		
fdd}Iz&|j0|%|I|Id t"j#+|r{t1dt"j#2|  |W S td W d	S  ty }J ztd|J  W Y d	}J~Jd	S d	}J~Jww )u
  Rendert eine Rechnung direkt als PDF via ReportLab (Platypus).

    system: Abrechnungssystem-Instanz (liefert config, folder_rechnungen, _build_docx_context).
    Gibt den absoluten PDF-Pfad zurück oder None bei Fehler (fehlende Abhängigkeit oder Exception).
    r   )A4)mm)HexColorwhite)TA_RIGHT	TA_CENTERParagraphStyle)SimpleDocTemplateTable
TableStyle	ParagraphSpacer
HRFlowableImageu>   reportlab nicht installiert – Fallback auf DOCX+LibreOffice.N#AkzentfarbeAccent_Color1B5E20z#1B5E20Abbuchung_Modusabbuchung_modusueberweisungabrechnungsverein	SEPA_IBAN	sepa_iban SEPA_BICsepa_bicSEPA_Creditor_IDsepa_creditor_idBankbankZVRnamezvribanbiccreditor_idadresse	Rechnung__z.pdf         z	Rechnung rechnungsnummer)pagesize
leftMarginrightMargin	topMarginbottomMargintitle+   c                    s(   t dddd}||  | fi |S )N	Helvetica      #@   )fontNamefontSizeleading)dictupdate)r)   kwdefaultsr    core/invoice_pdf.pySU   s   
z"render_invoice_pdf_html.<locals>.Snormalsmall      z#666666)r@   rA   	textColorright	   )r@   	alignmentlbl)r@   rM   rP   pay_lbl      !@   )r@   rM   rA   pay_val)r@   rA   ustz#555555footer      @#aaaaaaFc                    s"   |p}|rd|  d}  | |S )N<b></b>rF   )textstylebold)r   s_normalrF   rG   Pc   s   
z"render_invoice_pdf_html.<locals>.Pz#f4f4f4z#e8e8e8)	Logo_PathLogo_FilenameConfig2   proportional)widthheightkindKleinunternehmerJaja
UID_Nummervereinsstrassez<br/>
vereinsortz<br/>UID-Nr.: rZ   vereinsnamer[   vnzHelvetica-Bold)r?   r@   rM   rP   va)r@   rM   rP   rA   g      ?)	colWidths)VALIGNr   r   rv   TOPBOTTOMPADDINGrt   ru      	LINEBELOWz#cccccc      z!<font size='7.5' color='#999999'>u    · z</font>	anschriftstrasseplz ortmitglied_uidz	UID-Nr.: is_gutschriftzGutschriftsdatum:u   Fälligkeitsdatum:zRechnungsnummer:zRechnungsdatum:rechnungsdatumfaelligkeitsdatum*   !   ))
TOPPADDINGrt   ru   r{   )rx   rt   ru   r{   )LEFTPADDINGrt   ru   r   g?g?   doc_typRECHNUNGr:      )r?   r@   rM   rA   anredezN,<br/>wir schreiben Ihnen folgende Gutschrift aus der Energiegemeinschaft gut:zO,<br/>wir verrechnen hiermit die Energieleistungen aus der Energiegemeinschaft:thr<   )r?   r@   rA   rM   th_r)r?   r@   rA   rM   rP   td_rBeschreibungZeitraumzMenge (kWh)zPreis
(ct/kWh)u   Betrag (€)
BACKGROUNDrv   r   )rs   rt   r   MIDDLE)r   rt   ru      )rx   rt   ru   r   )r   rt   ru   ry   )RIGHTPADDINGrt   ru   ry   c                    s`    d|  ddddddddg ddfd	f fd
dfd	ffg7 d7 d S )NrZ   r[   secrS   )r@   r!   r   r   rv   SPANr{   )append)label)GREY_BGr`   rH   rrowststylesrF   rG   add_section   s   *z,render_invoice_pdf_html.<locals>.add_sectionc              	      sj     t|  t| t| t| t|g  ddfdfdf d7 d S )Nrz   r   rv   333333?r{   )r   _esc)desczeitraummengepreisbetrag)r`   ROW_LINEr   r   r   r   rF   rG   add_item   s   $z)render_invoice_pdf_html.<locals>.add_itemu   Strombezug · Zählpunkt …zp_consumptionbezug_netto_tarifz5Bezug aus gemeinschaftlicher Erzeugungsanlage (Netto)consumption_vonu    – consumption_bisconsumptionbezug_netto_betragzUmsatzsteuer 20%bezug_mwst_betragz-Bezug aus gemeinschaftlicher Erzeugungsanlagetarif_bezugkosten_consumptionu   Einspeisung · Zählpunkt …zp_generationlandwirt_netto_tarifz9Einspeisung in gemeinschaftliche Erzeugungsanlage (Netto)generation_vongeneration_bis
generation-landwirt_netto_betragzUmsatzsteuer 13%landwirt_mwst_betragz1Einspeisung in gemeinschaftliche Erzeugungsanlagetarif_einspeisungkosten_generationrc_mwst_betragz	RC-Anteilz<b>Gesamtbetrag</b>totg      %@)r@   r?   gesamtkostenu    €</b>tot_r)r@   r?   rM   rP   r   	LINEABOVErv   z#bbbbbb   r   c                    s   g | ]} | qS rF   rF   ).0f)WrF   rG   
<listcomp>#  s    z+render_invoice_pdf_html.<locals>.<listcomp>)gGz?g)\(?p=
ף?r   g333333?r   ))ust_hint_bezugBezug)ust_hint_einspeisungEinspeisungz:    )r   eigenes_kontoZahlungsinformation	pay_titler=   )r?   r@   rM   u	    · BIC: zGutschrift durch:zAbbuchung durch:u   Überweisung auf Ihr KontozSEPA-Lastschriftz</b> im Auftrag von z	ZVR-Zahl:zAdresse:zKonto Abrechnungsverein:u   Gläubiger-ID:zIhr Konto (IBAN):kontonummeru   Durchführung am:z ()z, Vereinsstrasse
VereinsortzVereinskonto (IBAN):c                    s$   g | ]\}} | |gqS rF   rF   )r   rQ   val)r`   	s_pay_lbl	s_pay_valrF   rG   r   ^  s   $ z#f7f7f7BOX#dddddd)r   rt   ru   r   )rx   rt   ru   r   c                    sx   |    |  d | d d  }| | | | dd |  d | d  |   d S )Nr   r   r   r<   rX   rY   r   )	saveStatesetStrokeColorsetLineWidthlinesetFontsetFillColordrawCentredStringrestoreState)canvasdoc_line_y)r
   _footer_text	_footer_y_left_m_page_w_right_mr	   rF   rG   _draw_footeru  s   
z-render_invoice_pdf_html.<locals>._draw_footer)onFirstPageonLaterPageszPDF (ReportLab): z,ReportLab: PDF nach build() nicht vorhanden.z)ReportLab PDF-Erstellung fehlgeschlagen: )NF)3reportlab.lib.pagesizesr   reportlab.lib.unitsr	   reportlab.lib.colorsr
   r   reportlab.lib.enumsr   r   reportlab.lib.stylesr   reportlab.platypusr   r   r   r   r   r   r   ImportErrorloggerwarning_build_docx_contextConsumption
Generationstrconfiggetstriplstrip	Exceptionlowerr   ospathjoinfolder_rechnungenRechnungsnummerName4Rechnungabspathisabs	main_pathexistsr   setStyler   filterbuildinfobasename)Ksystemr   r   r   r   r   r   r   r   r   r   r   r   ctx	has_bezughas_einspeisung
accent_hexACCENTr   is_avr    r#   creditorr'   
zvr_vereinav_nameav_zvrav_ibanav_bicav_creditor
av_adresser   s_smalls_rights_lbls_usts_footerstory	logo_cellkeylpath_kleinunt_hdr_verein_uid_hdr_verein_addrverein_cellhdrabsenderrecipient_cellr   faellig_lbl	meta_rowsmeta_taddr_t
intro_textr   r   r   r   col_witems_thint_keyr   hint_show_payment_blockpay_rowsav_iban_bic_action_durchfiban_bic
vereinsadrpay_datapay_t_page_hr   erF   )r   r
   r`   r   r   r   rH   r   r   r   r   r   r   r	   r   r   r_   r   r   r   r   rG   render_invoice_pdf_html   sN  
(




	


 "

		 


 



	
rC  )N)__doc__r  loggingxml.sax.saxutilsr   r   core.modelsr   r   	getLogger__name__r   r   rC  rF   rF   rF   rG   <module>   s    
