o
    b
j$                     @   s   d Z ddlZddlZddlmZ ddlZddlmZm	Z	 ddl
mZmZ ddlmZmZ eeZdedefd	d
ZdededededededefddZdedededededededdfddZdS )uW   Kassabuch-Verwaltung: Rechnungsnummern-Datei anlegen, befüllen, Batch-Zusammenfassung.    N)	timedelta)load_workbookWorkbook)FontPatternFill)RECHNUNG_COLUMNSMitgliedpathreturnc                 C   s  ddl }ddlm} | j}tj| st }|j}d|_	t
g d }|| t|ddD ]\}}tdd	|jd|d
_q/|g d tddd}	tddD ]
}|	|jd|d
_qQtddd|jddd
_d|jddd
_d|jddd
_d|jd _d|jd _d|jd _d|jd _d|jd _d|jd  _d!|jd" _d|jd# _d$|jd% _d$|jd& _d|jd' _d!|jd( _d|jd) _||  dS t| }
|
jsd*|
jvrdS |
d* tjd+| d,d  }|jrdS |t  S )-u  Legt das Kassabuch-Excel neu an (falls nicht vorhanden) und gibt die letzte Rechnungsnummer zurück.

    Zeile 1 = Überschriften, Zeile 2 = manuelle Anfangssaldo-Eingabe (gelb hinterlegt).
    Gibt 0 zurück wenn das Kassabuch neu angelegt oder leer ist.
    r   N)datetime	Kassabuch)Linku   Steuerschuld RC (€)u   Steuerschuld kumuliert (€)   )startTboldrowcolumn) r   r   u"   → Anfangssaldo (bitte eintragen)r   r   r   r   g        z=I2r   solidFFF9C4fgColor      7B5800)r   color      #,##0.00 €	   
   A   BC*   D   E   F   GH   IJKLMRechnungsnummer^z_(\d+))!rer   nowyearosr	   existsr   activetitler   append	enumerater   cellfontr   rangefillnumber_formatcolumn_dimensionswidthsavepd
read_excelemptycolumnsastypestrextractdropnaintmax)r	   _rer   current_yearwb_newws_newheaderscol_i_yellowdfcurrent_year_numbers r\   c/sessions/vibrant-dreamy-cray/mnt/energie-durchdacht/EEG-Abrechnung/v1.07b_upload/core/kassabuch.pyinit_kassabuch   s\   




r^   mitglieddescriptionmsgidconfigfolder_rechnungenc           !      C   sx  zt | }|j}	t|dd  dk}
|dd }d}d}|jdkrd|jd	krd|
ra|dkr5d
nd}d| d}ztt|dd	dd}t
|j| d d}W n+ ty`   Y n#w d}n|jdkru|jd	kru|
rrdnd}n|jd	kr|jd	kr|
rd}d|d|d|||j|d |jt
|jdg	}|	| |	j}|	j|dd}d|d  d| |_d |_d |	j|d!d_|jd	krtd"d#d$}td%d&}ntd"d'd$}td(d&}tdd)D ]
}||	j||d_q||	j|d!d_d}|r(tj|r(d*|j d+|j }d,D ]}tj||| }tj|r&|} nq|rR|	j|d)d}tj | }tj!||}|	d-d.}d/|_||_"td0d1d2|_|durj|	j|d3d}||_d |_td4d&|_|	j|dd}|durd5|d  d6|d  d7| |_nd5|d  d6|d  d8|_d |_td4d&|_|#|  |W S  ty }  z	t$%d9|    d} ~ ww ):u   Fügt eine Mitglieds-Zeile ins Kassabuch-Excel ein.

    Gibt die Zeilennummer der neu geschriebenen Zeile zurück (für Gruppen-Tracking).
    Abbuchungen (positive Kosten) → rote Zeile; Gutschriften → grüne Zeile.
    KleinunternehmerJajaRC_Kostentraegerr   r   Nr*   r   zMitgl.EEGz | RC 20% ()Tarif_Einspeisung0,.   r   z
 | USt 20%r/   z	 | RC 13%z
 | USt 13%z | KU-befreit%d.%m.%Yz |r!   r   =Jr   z+Ir   r    r   FFEBEEr   B71C1C)r   E8F5E91B5E20   	Rechnung_rX   )z.pdfz.docxz.xlsx\/u   Rechnung öffnen0563C1single)r   	underliner   E65100z=IF(ISNUMBER(Mz),Mz,0)+Lz,0)z*Fehler beim Aktualisieren des Kassabuchs: )&r   r<   rM   getstriplower
Steuersatz
Generationfloatreplaceround	ExceptionstrftimeNamelstripr5   Kostenr>   max_rowr@   valuerD   r   r   rB   rC   rA   r:   r	   r;   Name4Rechnungjoindirnamerelpath	hyperlinkrG   loggererror)!r	   r_   r`   ra   rb   datum_rechnungdatum_abbuchungrc   wbws_kb_kleinunt	_kb_rc_kt_steuer_suffix_steuerschuld_traeger_t_enew_row_datarow_idx
kassa_cellrow_fillbetrag_fontrW   invoice_pathbaseext	candidate	link_cellkassabuch_dirrelurlsteuerschuld_cellkum_celler\   r\   r]   update_kassabuchX   s   





"
r   ls_rowsgs_rowsls_msgidgs_msgid
ls_ctrlsum
gs_ctrlsumc                 C   s  t j| sdS zt| }|j}	d|	jj_|d}
|t	dd d}g }|dkr@|r@|
|
|
|d|dd	td
dd|f |dkrZ|rZ|
|||d|dd	td
dd|f |D ]Z\}}}}}}|	
d||||ddddg	 |	j}|	j|dd}d|d  |_d|_tddD ]}|	j||d}||_tdd|_q|D ]}d|	j| _d|	j| _qd|	j| _q\||  W dS  ty } ztd|  W Y d}~dS d}~ww )zSchreibt je eine Zusammenfassungszeile pro SEPA-Batch und klappt Detail-Zeilen ein.

    ls_rows / gs_rows: Liste der Zeilennummern der jeweiligen Mitglieds-Zeilen.
    NTro   r   )daysr   u   SEPA Lastschrift Batch (∑ z.2fu    €)r   FFCDD2r   u   SEPA Gutschrift Batch (∑ C8E6C9r   r!   r   rp   r   ru   r   z1Fehler beim Schreiben der Kassabuch-Batchzeilen: )r:   r	   r;   r   r<   sheet_properties	outlinePrsummaryBelowr   r   r>   r   r   r@   r   rD   rB   rC   r   rA   row_dimensionsoutline_levelhidden	collapsedrG   r   r   r   )r	   r   r   r   r   r   r   r   r   r   datum_lsdatum_gsbatchesrdbdra   beschrrC   detail_rowssummary_rowr   rW   r@   rr   r\   r\   r]   write_kassabuch_batch_summary   sZ   




r   )__doc__r:   loggingr   r   pandasrH   openpyxlr   r   openpyxl.stylesr   r   core.modelsr   r   	getLogger__name__r   rM   rP   r^   dictr   listr   r   r\   r\   r\   r]   <module>   sT    
H	
t	