-
Notifications
You must be signed in to change notification settings - Fork 0
/
modul_transaction.py
416 lines (296 loc) · 13 KB
/
modul_transaction.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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
# -*- coding: utf-8 -*-
"""modul_transaction.ipynb
Automatically generated by Colaboratory.
Original file is located at
https://colab.research.google.com/drive/1cqhNx4xZT928LKyN4fkbaPz8gLmd7Vaf
"""
#modul untuk membuat tabel
from tabulate import tabulate
#membuat class Transaction
class Transaction:
#menginisiasi method init
def __init__(self):
"""
membuat class Transaction untuk membuat transaksi belanja
"""
#menyimpan daftar barang ke dalam list
self.daftar_barang = []
#method untuk menambahkan barang ke dalam daftar barang
def tambah_barang(self, nama_barang, jumlah_barang, harga_barang):
"""
method untuk menginputkan barang ke dalam daftar barang
Parameters:
-----------
nama_barang : str
nama barang yang akan diinputkan
jumlah_barang : int
jumlah barang yang akan diinputkan
harga_barang : int
harga barang yang akan diinputkan
Returns:
--------
none
"""
#cek baris kode apakah ada error atau tidak
try:
#membuat data dictionany untuk daftar barang
data = {
'nama barang': nama_barang,
'jumlah barang': jumlah_barang,
'harga barang': harga_barang,
'total harga': jumlah_barang * harga_barang
}
#cek kondisi nama barang harus berupa huruf
if type(data['nama barang']) != str:
#pesan error apabila inputan tidak berupa huruf
raise TypeError('nama barang tidak sesuai')
#cek kondisi apabila jumlah barang tidak berupa angka
if type(data['jumlah barang']) != int:
#pesan error apabila jumlah barang tidak berupa angka
raise TypeError('jumlah barang harus berupa angka')
#cek kondisi apabila harga barang tidak berupa angka
if type(data['harga barang']) != int:
#pesan error apabila harga barang tidak berupa angka
raise TypeError('harga barang tidak sesuai')
#menangkap pesan error
except TypeError as e:
#menampilkan tiap pesan apabila inputan tidak sesuai
print(e)
#memasukkan inputan data kedalam daftar barang
self.daftar_barang.append(data)
#method untuk mengubah nama barang berdasarkan nama barang
def update_nama_barang(self, nama_barang, nama_barang_baru):
"""
method untuk mengubah salah satu nama barang
Parameters:
-----------
nama_barang : str
nama barang yang ingin diubah namanya
nama_barang_baru : str
input nama barang baru
Returns:
--------
none
"""
#nilai awal barang tidak ada didalam daftar barang
barang_ada = False
#cek error
try:
#perulangan untuk mengupdate data nama barang
for barang in self.daftar_barang:
#cek kondisi nama barang yang akan diubah
if barang['nama barang'] == nama_barang:
#cek apabila barang ada didalam daftar barang
barang_ada = True
#mengubah nama barang dengan nama baru
barang['nama barang'] = nama_barang_baru
#menampilkan pesan nama barang yang berhasil diubah
print(f"{nama_barang} berhasil diupdate menjadi {nama_barang_baru}")
#kondisi apabila tidak ada barang yang ingin diubah didalam daftar barang
if barang_ada != True:
#pesan error ababila barang tidak terdaftar
raise ValueError(f"nama barang {nama_barang} tidak ada didalam daftar barang")
#menangkap pesan error
except Exception as e:
#menampilkan pesan error barang tidak ada di daftar barang
print("Error:", e)
#method untuk mengubah jumlah barang berdasarkan nama barang
def update_jumlah_barang(self, nama_barang, jumlah_barang_baru):
"""
method untuk mengubah jumlah barang
Parameters:
-----------
nama_barang : str
nama barang yang ingin diubah jumlah barangnya
jumlah_barang_baru : int
input jumlah barang baru
Returns:
--------
none
"""
#kondisi nilai barang
barang_ada = False
#cek error
try:
#cek kondisi apabila jumlah tidak berupa angka
if type(jumlah_barang_baru) != int:
#pesan apabila jumlah tidak berupa angka
raise Exception("jumlah barang harus berupa angka")
#perulangkan untuk mengubah jumlah barang
for barang in self.daftar_barang:
#cek kondisi nama barang yang akan diubah jumlahnya
if barang['nama barang'] == nama_barang:
#kondisi apabila ada barang yang akan diubah jumlahnya didalam daftar barang
barang_ada = True
#mengubah jumlah barang dengan jumlah barang baru
barang['jumlah barang'] = jumlah_barang_baru
#mengubah total harga secara otomatis apabila jumlah barang diupdate
barang['total harga'] = jumlah_barang_baru * barang['harga barang']
#menampilkan pesan jumlah barang yang telah diupdate
print("jumlah barang berhasil diupdate")
#cek kondisi apabila tidak ada nama barang didalam daftar barang
if barang_ada != True:
#pesan error apabila tidak ada barang didalam daftar
raise ValueError(f"nama barang {nama_barang} tidak ada didalam daftar barang")
#menangkap pesan error
except Exception as e:
#menampilkan pesan error apabila tidak ada barang didalam daftar
print("Error:", e)
#method untuk mengubah harga barang berdasarkan nama barang
def update_harga_barang(self, nama_barang, harga_barang_baru):
"""
membuat method update harga barang untuk mengubah harga barang
Parameters:
-----------
nama_barang : str
nama barang yang ingin diubah harganya
harga_barang_baru : int
input harga barang baru
Returns:
--------
none
"""
#kondisi awal barang di daftar
barang_ada = False
#cek apakah ada error
try:
#cek kondisi apabila inputan tidak berupa angka
if type(harga_barang_baru) != int:
#pesan error apabila harga tidak berupa angka
raise Exception("harga barang harus berupa angka")
#perulangan untuk mengubah harga barang
for barang in self.daftar_barang:
#cek kondisi nama barang yang akan diubah harganya
if barang['nama barang'] == nama_barang:
#kondisi apabila barang ada didaftar barang
barang_ada = True
#megubah harga barang dengan harga yang baru
barang['harga barang'] = harga_barang_baru
#mengubah total harga secara otomatis apabila jumlah diupdate
barang['total harga'] = barang['jumlah barang'] * harga_barang_baru
#menampilkan pesan harga barang yang telah terupdate
print(f"harga barang berhasil diupdate")
#cek kondisi apabila tidak ada barang didalam daftar barang
if barang_ada != True:
#pesan error apabila tidak ada barang didalam daftar barang
raise ValueError(f"nama barang {nama_barang} tidak ada didalam daftar barang")
#menangkap pesan error
except Exception as e:
#menampilkan pesan setiap error
print("Error:", e)
#method untuk menghapus salah satu barang berdasarkan nama barang
def hapus_barang(self, nama_barang):
"""
method untuk menghapus salah satu barang didalam daftar barang
Parameters:
-----------
nama_barang : str
menghapus barang berdasarkan nama barang
Returns:
--------
none
"""
#kondisi awal barang kosong
barang_ada = False
#cek error
try:
#perulangan untuk menghapus barang
for barang in self.daftar_barang:
#cek kondisi nama barang yang akan dihapus
if barang['nama barang'] == nama_barang:
#kondisi barang jika ada didalam daftar
barang_ada = True
#menghapus barang dari dari daftar barang
self.daftar_barang.remove(barang)
#menampilkan pesan barang yang berhasil dihapus
print(f"{barang['nama barang']} berhasil dihapus")
#cek kondisi apabila tidak ada barang didalam daftar barang
if barang_ada != True:
#pesan error apabila tidak ada barang didalam daftar barang
raise ValueError(f"nama barang {nama_barang} yang dihapus tidak ada dalam daftar")
#menangkap pesan setiap error
except Exception as e:
#menampilkan pesan setiap error
print("Error:", e)
#method untuk menghapus semua daftar barang di list
def reset_transaction(self):
"""
method untuk menghapus semua daftar barang yang dibeli
"""
#hapus semua list didalam daftar barang
self.daftar_barang.clear()
#menampilkan pesan data berhasil dihapus
print("Data berhasil direset")
#method untuk cek order belanjaan
def cek_order(self):
"""
method untuk mengecek dan menampilkan inputan daftar barang
"""
#cek apakah ada error
try:
#perulangan untuk cek apakah inputan sudah benar atau belum
for barang in self.daftar_barang:
#cek kondisi apabila inputan nama barang tidak berupa huruf
if type(barang['nama barang']) != str:
#pesan error apabila inputan nama barang tidak berupa huruf
raise TypeError('nama barang tidak sesuai')
#cek kondisi apabila inputan jumlah barang tidak berupa angka
if type(barang['jumlah barang']) != int:
#pesan error apabila inputan jumlah barang tidak berupa angka
raise TypeError('jumlah barang harus berupa angka')
#cek kondisi apabila inputan harga barang tidak berupa angka
if type(barang['harga barang']) != int:
#pesan error apabila inputan harga barang tidak berupa angka
raise TypeError('harga barang tidak sesuai')
#menangkap pesan tiap-tiap error
except TypeError as e:
#menampilkan pesan error apabila ada salah input data
print("Terdapat kesalahan input data")
#menampilkan pesan tiap-tiap error
print(e)
else:
#menampilkan pesan apabila inputan sudah benar
print("Pemesanan sudah benar")
#membuat header tabel daftar barang
headers = ['Nama Barang', 'Jumlah Barang', 'Harga Barang', 'Total Harga Barang']
#membuat isi tabel daftar barang
rows = [[barang['nama barang'], barang['jumlah barang'], barang['harga barang'], barang['total harga']] for barang in self.daftar_barang]
#menampilkan ini daftar barang kedalam bentuk tabel menggunakan library tabulate
print(tabulate(rows, headers = headers, tablefmt = "heavy_outline", stralign = "center", numalign = "center"))
#method untuk mengitung total belanja dari daftar belanja
def total_belanja(self):
"""
method untuk menghitung total belanja daftar belanja
"""
#memberikan nilai 0 karena total belanja belum dihitung
total_belanja = 0
#perulangan untuk menghitung total belanja
for barang in self.daftar_barang:
#mengalikan jumlah barang dengan harga barang,
#kemudian total harga barang masing2 dijumlahkan menjadi total belanja
total_belanja += barang['jumlah barang'] * barang['harga barang']
#cek kondisi apabila total belanja lebih dari 500 ribu
if total_belanja > 500_000:
#menghitung total bayar dengan diskon 10%
total_bayar = total_belanja - (total_belanja * 0.1)
#menampilkan pesan bahwa total belanja mendapat diskon 10%
print('Selamat, belanja anda mendapat diskon 10%')
#cek kondisi apabila total belanja lebih dari 300 ribu
elif total_belanja > 300_000:
#menghitung total bayar dengan diskon 8%
total_bayar = total_belanja - (total_belanja * 0.08)
#menampilkan pesan bahwa total belanja mendapat dikskon 8%
print('Selamat, belanja anda mendapat diskon 8%')
#cek kondisi apabila total belanja lebih dari 200 ribu
elif total_belanja > 200_000:
#menghitung total bayar dengan diskon 5%
total_bayar = total_belanja - (total_belanja * 0.05)
#menampilkan pesan bahwa total belanja mendapat dikskon 5%
print('Selamat, belanja anda mendapat diskon 5%')
else:
#menampilkan total bayar saja apabila total belanja dibawah 200 ribu
total_bayar = total_belanja
#menampilkan pesan total belanja
print(f'Total Belanja: {total_belanja}')
#menampilkan pesan total yang harus dibayarkan
print(f'Total Bayar: {round(total_bayar)}')