-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
60 lines (49 loc) · 2.16 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import pandas as pd
import glob
from fpdf import FPDF
from pathlib import Path
filepaths = glob.glob("invoices/*")
for filepath in filepaths:
pdf = FPDF(orientation="P", unit="mm", format="A4")
pdf.add_page()
filename = Path(filepath).stem
invoice_nr, date = filename.split("-")
pdf.set_font(family="Times", size=16, style="B")
pdf.cell(w=50, h=8, txt=f"Invoice nr.{invoice_nr}", ln=1)
pdf.set_font(family="Times", size=16, style="B")
pdf.cell(w=50, h=8, txt=f"Date {date}", ln=1)
data = pd.read_excel(filepath, sheet_name="Sheet 1")
# Adding the header
columns = [item.replace("_", " ").title() for item in list(data.columns)]
pdf.set_font(family="Times", size=10, style="B")
pdf.set_text_color(80, 80, 80)
pdf.cell(w=30, h=8, txt=columns[0], border=1)
pdf.cell(w=60, h=8, txt=columns[1], border=1)
pdf.cell(w=40, h=8, txt=columns[2], border=1)
pdf.cell(w=30, h=8, txt=columns[3], border=1)
pdf.cell(w=30, h=8, txt=columns[4], border=1, ln=1)
# Adding Rows
for index, row in data.iterrows():
pdf.set_font(family="Times", size=10)
pdf.set_text_color(80, 80, 80)
pdf.cell(w=30, h=8, txt=str(row["product_id"]), border=1)
pdf.cell(w=60, h=8, txt=str(row["product_name"]), border=1)
pdf.cell(w=40, h=8, txt=str(row["amount_purchased"]), border=1)
pdf.cell(w=30, h=8, txt=str(row["price_per_unit"]), border=1)
pdf.cell(w=30, h=8, txt=str(row["total_price"]), border=1, ln=1)
# adding the total price column
total_sum = data["total_price"].sum()
pdf.set_font(family="Times", size=10)
pdf.set_text_color(80, 80, 80)
pdf.cell(w=30, h=8, txt="", border=1)
pdf.cell(w=60, h=8, txt="", border=1)
pdf.cell(w=40, h=8, txt="", border=1)
pdf.cell(w=30, h=8, txt="", border=1)
pdf.cell(w=30, h=8, txt=str(total_sum), border=1, ln=1)
# Add total sum sentence
pdf.set_font(family="Times", size=10)
pdf.cell(w=30, h=8, txt=f"The total price is {str(total_sum)}", ln=1)
# Add the company name
pdf.set_font(family="Times", size=10)
pdf.cell(w=30, h=8, txt="Python")
pdf.output(f"PDFs/Invoice {filename}.pdf")