[Python] Generowanie faktur z pliku csv
W tym wpisie zajmiemy si臋 generowaniem fakur na podstawie danych z pliku CSV. Zadaniem programu b臋dzie wczytanie danych z pliku CSV i wygenerowanie faktur w formacie PDF. Do generowania plik贸w PDF u偶yty zostanie modu艂 reportlab, wi臋c przed rozpocz臋ciem pracy zainstaluj go.
Przed rozpocz臋ciem tworzenia kodu ustalmy struktur臋 danych w pliku: numer faktury`data wystawienia`termin p艂atno艣ci`numer konta`kwota netto`kwota do zap艂aty`dane wystawcy`dane klienta`nazwa us艂ugi. Ka偶da faktura to pojedynczy wiersz w pliku.
import csv
from reportlab.lib.pagesizes import letter
from reportlab.lib import colors
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph
from reportlab.lib.styles import getSampleStyleSheet
def generate_invoice(invoice_data):
invoice_number, issue_date, due_date, account_number, net_amount, amount_due, issuer_info, client_info, service_info = invoice_data
filename = f"invoice_{invoice_number}.pdf"
# Tworzenie pliku PDF
pdf = SimpleDocTemplate(filename, pagesize=letter)
elements = []
# Dodajemy tytu艂 dokumentu "Faktura VAT"
styles = getSampleStyleSheet()
title_style = styles['Heading1']
title_paragraph = Paragraph("Faktura VAT", title_style)
elements.append(title_paragraph)
# Dodanie tytu艂u faktury
header = f"Numer faktury: {invoice_number}"
header_paragraph = Paragraph(header, styles['Normal'])
elements.append(header_paragraph)
data = [
['Element', 'Warto艣膰'],
['Data wystawienia', issue_date],
['Termin p艂atno艣ci', due_date],
['Numer konta', account_number],
['Kwota netto', net_amount],
['Kwota do zap艂aty', amount_due],
['Dane wystawcy', issuer_info],
['Dane Klienta', client_info],
['Us艂uga', service_info] # Nowa kolumna dla us艂ugi
]
# Utworzenie tabeli faktury
table = Table(data)
table.setStyle(TableStyle([
('BACKGROUND', (0, 0), (-1, 0), colors.grey),
('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
('ALIGN', (0, 0), (-1, -1), 'CENTER'),
('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),
('BOTTOMPADDING', (0, 0), (-1, 0), 12),
('BACKGROUND', (0, 1), (-1, -1), colors.beige),
('GRID', (0, 0), (-1, -1), 1, colors.black),
]))
elements.append(table)
# Ostateczne zapisanie dokumentu
pdf.build(elements)
print(f"Faktura zapisana: {filename}")
def read_invoices_from_csv(file_path):
with open(file_path, mode='r', encoding='utf-8') as csvfile:
csv_reader = csv.reader(csvfile, delimiter='`')
for row in csv_reader:
# Zak艂adamy, 偶e ka偶da linia w CSV ma odpowiedni膮 liczb臋 danych
if len(row) == 9: # Teraz 9 element贸w w wierszu
generate_invoice(row)
if __name__ == "__main__":
csv_file_path = 'invoices.csv' # 艢cie偶ka do pliku CSV
read_invoices_from_csv(csv_file_path)
Przyk艂adowy plik CSV:
00001`2023-10-01`2023-10-15`1234567890123456`1000.00`1230.00`"Firma XYZ, ul. Przyk艂adowa 1, 00-001 Warszawa"`"Jan Kowalski, ul. Klienta 1, 00-001 Warszawa"`"Us艂uga informatyczna"
00002`2023-05-15`2023-05-30`1234567890123456`80.00`98.04`"Firma XYZ, ul. Przyk艂adowa 2, 00-001 Warszawa"`"Jan Kowalski, ul. Klienta 2, 00-002 Warszawa"`"Us艂uga informatyczna"
Komentarze
Prze艣lij komentarz
Dzi臋ki za komentarz!