[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!