Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -46,10 +46,33 @@ def create_pdf(data, filename):
|
|
46 |
|
47 |
# Tabel Produk
|
48 |
elements.append(Paragraph("Daftar Produk yang Ditawarkan:", bold_style))
|
49 |
-
|
|
|
|
|
|
|
50 |
for p in data['produk']:
|
51 |
-
|
52 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
table.setStyle(TableStyle([
|
54 |
('BACKGROUND', (0, 0), (-1, 0), colors.grey),
|
55 |
('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
|
@@ -57,17 +80,19 @@ def create_pdf(data, filename):
|
|
57 |
('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),
|
58 |
('FONTSIZE', (0, 0), (-1, -1), 12),
|
59 |
('BOTTOMPADDING', (0, 0), (-1, 0), 12),
|
60 |
-
('BACKGROUND', (0, 1), (-1, -
|
61 |
('GRID', (0, 0), (-1, -1), 1, colors.black),
|
|
|
|
|
|
|
62 |
]))
|
|
|
|
|
|
|
|
|
63 |
elements.append(table)
|
64 |
elements.append(Spacer(1, 0.5*cm))
|
65 |
|
66 |
-
# Diskon
|
67 |
-
diskon_text = f"Diskon: {data['diskon']}%".format() if 'diskon' in data else "Diskon: Tidak ada"
|
68 |
-
elements.append(Paragraph(diskon_text, normal_style))
|
69 |
-
elements.append(Spacer(1, 0.5*cm))
|
70 |
-
|
71 |
# Syarat dan Ketentuan
|
72 |
syarat_text = f"Syarat dan Ketentuan:<br/>{data['syarat']}" if 'syarat' in data else "Syarat dan Ketentuan: Tidak ada"
|
73 |
elements.append(Paragraph(syarat_text, normal_style))
|
@@ -107,7 +132,10 @@ def buat_penawaran(nama_prospek, alamat_prospek, jenis_prospek, produk_dipilih,
|
|
107 |
data['produk'].append({'nama': "Produk Contoh", 'jumlah': 1, 'harga': 100000})
|
108 |
|
109 |
if diskon:
|
110 |
-
|
|
|
|
|
|
|
111 |
if syarat:
|
112 |
data['syarat'] = syarat
|
113 |
|
|
|
46 |
|
47 |
# Tabel Produk
|
48 |
elements.append(Paragraph("Daftar Produk yang Ditawarkan:", bold_style))
|
49 |
+
|
50 |
+
# Data tabel
|
51 |
+
table_data = [["Nama Produk", "Jumlah", "Harga (Rp)", "Total (Rp)"]]
|
52 |
+
sub_total = 0
|
53 |
for p in data['produk']:
|
54 |
+
total = p['jumlah'] * p['harga']
|
55 |
+
sub_total += total
|
56 |
+
table_data.append([p['nama'], str(p['jumlah']), f"{p['harga']:,}", f"{total:,}"])
|
57 |
+
|
58 |
+
# Hitung diskon dan grand total
|
59 |
+
if 'diskon' in data and data['diskon']:
|
60 |
+
diskon_percent = float(data['diskon'])
|
61 |
+
diskon_amount = (diskon_percent / 100) * sub_total
|
62 |
+
grand_total = sub_total - diskon_amount
|
63 |
+
else:
|
64 |
+
diskon_percent = 0
|
65 |
+
diskon_amount = 0
|
66 |
+
grand_total = sub_total
|
67 |
+
|
68 |
+
# Tambahkan baris sub-total, diskon, dan grand total
|
69 |
+
table_data.append(["", "", "Sub-Total", f"{sub_total:,}"])
|
70 |
+
if diskon_percent > 0:
|
71 |
+
table_data.append(["", "", f"Diskon ({diskon_percent}%)", f"-{diskon_amount:,}"])
|
72 |
+
table_data.append(["", "", "Grand Total", f"{grand_total:,}"])
|
73 |
+
|
74 |
+
# Buat tabel
|
75 |
+
table = Table(table_data, colWidths=[6*cm, 2*cm, 3*cm, 3*cm])
|
76 |
table.setStyle(TableStyle([
|
77 |
('BACKGROUND', (0, 0), (-1, 0), colors.grey),
|
78 |
('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
|
|
|
80 |
('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),
|
81 |
('FONTSIZE', (0, 0), (-1, -1), 12),
|
82 |
('BOTTOMPADDING', (0, 0), (-1, 0), 12),
|
83 |
+
('BACKGROUND', (0, 1), (-1, -3), colors.beige),
|
84 |
('GRID', (0, 0), (-1, -1), 1, colors.black),
|
85 |
+
('SPAN', (0, -2), (1, -2)), # Span sub-total
|
86 |
+
('SPAN', (0, -1), (1, -1)), # Span grand total
|
87 |
+
('ALIGN', (2, -2), (3, -1), 'RIGHT'), # Align right for totals
|
88 |
]))
|
89 |
+
if diskon_percent > 0:
|
90 |
+
table.setStyle(TableStyle([
|
91 |
+
('SPAN', (0, -3), (1, -3)), # Span diskon
|
92 |
+
]))
|
93 |
elements.append(table)
|
94 |
elements.append(Spacer(1, 0.5*cm))
|
95 |
|
|
|
|
|
|
|
|
|
|
|
96 |
# Syarat dan Ketentuan
|
97 |
syarat_text = f"Syarat dan Ketentuan:<br/>{data['syarat']}" if 'syarat' in data else "Syarat dan Ketentuan: Tidak ada"
|
98 |
elements.append(Paragraph(syarat_text, normal_style))
|
|
|
132 |
data['produk'].append({'nama': "Produk Contoh", 'jumlah': 1, 'harga': 100000})
|
133 |
|
134 |
if diskon:
|
135 |
+
try:
|
136 |
+
data['diskon'] = float(diskon)
|
137 |
+
except ValueError:
|
138 |
+
data['diskon'] = 0
|
139 |
if syarat:
|
140 |
data['syarat'] = syarat
|
141 |
|