def lihat_riwayat_consumable(role): # Melihat riwayat pengambilan consumable if role == "Admin": # Validasi role = Admin datas_consumable_history = readCSV("consumable_history.csv") if datas_consumable_history[1] == []: print("Belum ada pengambilan consumable") else: sort_data_date(datas_consumable_history[1] ) # mengurutkan data terbaru berdasarkan tanggal if len(datas_consumable_history[1]) <= 5: # saat data <= 5 for i in range(len(datas_consumable_history[1])): print("ID Pengambilan : " + str(datas_consumable_history[1][i][0])) nama = readCSVdata( "user.csv", getRow("user.csv", int(datas_consumable_history[1][i][1])), 2) print("Nama Pengambil : " + nama) #print("Nama Pengambil : " + str(datas_consumable_history[1][i][1])) cons = readCSVdata( "consumable.csv", getRow("consumable.csv", str(datas_consumable_history[1][i][2])), getCol("consumable.csv", "nama")) print("Nama Consumable : " + cons) #print("Nama Consumable : " + str(datas_consumable_history[1][i][2])) print("Tanggal Pengambilan : " + str(datas_consumable_history[1][i][3])) print("Jumlah : " + str(datas_consumable_history[1][i][4])) print("") else: # saat data > 5 idx = 0 while idx < 5: print("ID Pengambilan : " + str(datas_consumable_history[1][idx][0])) nama = readCSVdata( "user.csv", getRow("user.csv", int(datas_consumable_history[1][idx][1])), 2) print("Nama Pengambil : " + nama) #print("Nama Pengambil : " + str(datas_consumable_history[1][idx][1])) cons = readCSVdata( "consumable.csv", getRow("consumable.csv", str(datas_consumable_history[1][idx][2])), getCol("consumable.csv", "nama")) print("Nama Consumable : " + cons) #print("Nama Consumable : " + str(datas_consumable_history[1][idx][2])) print("Tanggal Pengambilan : " + str(datas_consumable_history[1][idx][3])) print("Jumlah : " + str(datas_consumable_history[1][idx][4])) print("") idx += 1 else: # Role != Admin print("Anda tidak bisa mengakses riwayat!")
def ubahjumlah(role): # mengubah jumlah barang dalam inventory # KAMUS LOKAL # id, csv_file, nama : string # id_idx, col, jml, jml_awal : integer # ALGORITMA # validasi role Admin if (role == "Admin"): id = input("Masukkan ID: ") # validasi format ID if (id[0] == "G") | (id[0] == "C"): if id[0] == "G": csv_file = "gadget.csv" else: # id[0] == "C" csv_file = "consumable.csv" id_idx = getRow(csv_file, id) # validasi keberadaan id di inventory if id_idx != None: # id ada di inventory col = getCol(csv_file, "jumlah") jml = int(input("Masukkan jumlah: ")) nama = readCSVdata(csv_file, id_idx, getCol(csv_file, "nama")) stok = int(readCSVdata(csv_file, id_idx, getCol(csv_file, "jumlah"))) # validasi jumlah dan stok if stok + jml > 0: editCSVdata(csv_file, id_idx, col, str(stok + jml)) if jml > 0: # menambah item print(abs(jml), nama, "berhasil ditambahkan.", end=" ") elif jml < 0: # mengurang item print(abs(jml), nama, "berhasil dibuang.", end=" ") else: # jml == 0 print("Stok", nama, "tetap sama.", end=" ") print("Stok sekarang:", readCSVdata(csv_file, id_idx, getCol(csv_file, "jumlah")), "\n") else: # stok + jml < 0 print(abs(jml), nama, "gagal dibuang karena stok kurang.", end=" ") print("Stok sekarang:", str(stok), "( <", str(abs(jml)), ")\n") else: # id tidak ada di inventory print("Tidak ada item dengan ID tersebut!\n") else: # format id salah print("Tidak ada item dengan ID tersebut!\n") else: # role != "Admin" print("Anda tidak dapat melakukan perubahan pada item!\n")
def filteritem(user_id): # -> array of array of any # mengembalikan data consumable milik user yang pernah diambil # KAMUS LOKAL # datas_all, inventory : array of array of any # item_id, stok, item_numambil, item_name, item_rarity : string # ALGORITMA datas_all = readCSV("consumable_history.csv")[1] inventory = [] for i in range(len(datas_all)): if datas_all[i][1] == user_id: # ada pengambilan dari user item_id = datas_all[i][2] stok = datas_all[i][4] item_numambil = datas_all[i][0] item_name = readCSVdata("consumable.csv", getRow("consumable.csv", item_id), getCol("consumable.csv", "nama")) item_rarity = readCSVdata("consumable.csv", getRow("consumable.csv", item_id), getCol("consumable.csv", "rarity")) inventory.append([item_id, item_name, item_rarity, stok, item_numambil]) return inventory
def searchrarity(rarity): # -> array of array of any # mencari item di consumable.csv dengan rarity tertentu # KAMUS LOKAL # items, datas : array of array of any # i : integer # ALGORITMA items = [] datas = readCSV("consumable.csv")[1] for i in range(len(datas)): if datas[i][getCol("consumable.csv", "rarity")] == rarity: items.append(datas[i]) return items
def hapusitem(role): # menghapus item di database # KAMUS LOKAL # id, csv_file, nama, prompt : string # header : array of string # datas : array of ada string ada integer # ALGORITMA # validasi role Admin if (role == "Admin"): id = input("Masukkan ID item: ") # validasi format id if (id[0] == 'G') | (id[0] == 'C'): if id[0] == 'G': csv_file = "gadget.csv" else: # id[0] == 'C' csv_file = "consumable.csv" # validasi keberadaan id di inventory if getRow(csv_file, id) != None: # id ada di inventory nama = readCSVdata(csv_file, getRow(csv_file, id), getCol(csv_file, "nama")) prompt = input("Apakah anda yakin ingin menghapus " + nama + " (Y/N)? ") if prompt in 'Yy': # delete delCSVdata(csv_file, getRow(csv_file, id)) print("Item telah berhasil dihapus dari database.\n") else: # prompt not in 'Yy' print("Proses dibatalkan.\n") else: # id tidak ada di inventory print("Tidak ada item dengan ID tersebut!\n") else: # format ID tidak valid print("Tidak ada item dengan ID tersebut!\n") else: # role != "Admin" print("Anda tidak dapat melakukan perubahan pada item!\n")
def kembalikan(role, user_id): # mengembalikan seluruh barang. khusus user. # KAMUS # datas : array of any # gadget_dipinjam : array of array[1..3] of string # id_peminjam_col, id_gadget, nama_gadget, tgl : string # id_peminjaman, no, jml_pinjam, jml_awal, id : integer # ALGORITMA if role == "User": datas = readCSV("gadget_borrow_history.csv")[1] id_peminjam_col = getCol("gadget_borrow_history.csv", "id_peminjam") # cari data yang idnya segitu # memasukkan daftar gadget yang dipinjam dalam array # format -> [id_peminjaman, id_gadget, nama_gadget] gadget_dipinjam = [] for i in range(len(datas)): # iterasi tiap row dalam datas # untuk setiap pinjam dari user isnt_returned = readCSVdata( "gadget_borrow_history.csv", i, getCol("gadget_borrow_history.csv", "is_returned")) == "0" if (readCSVdata("gadget_borrow_history.csv", i, id_peminjam_col) == str(user_id)) & isnt_returned: # ambil id peminjaman id_peminjaman = readCSVdata( "gadget_borrow_history.csv", i, getCol("gadget_borrow_history.csv", "id")) # ambil namanya id_gadget = readCSVdata( "gadget_borrow_history.csv", i, getCol("gadget_borrow_history.csv", "id_gadget")) nama_gadget = readCSVdata("gadget.csv", getRow("gadget.csv", id_gadget), getCol("gadget.csv", "nama")) gadget_dipinjam.append([id_peminjaman, id_gadget, nama_gadget]) # cek barang pinjaman if len(gadget_dipinjam) > 0: # print seluruh data for i in range(len(gadget_dipinjam)): print(str(i + 1) + ".", gadget_dipinjam[i][2]) print() no = int(input("Masukkan nomor peminjaman: ")) - 1 # validasi nomor peminjaman if (no >= 0) and (no < len(gadget_dipinjam)): id_peminjaman = gadget_dipinjam[no - 1][0] id_gadget = gadget_dipinjam[no - 1][1] nama_gadget = gadget_dipinjam[no - 1][2] # ubah kalo mau bonus jml_pinjam = readCSVdata( "gadget_borrow_history.csv", getRow("gadget_borrow_history.csv", id_peminjaman), getCol("gadget_borrow_history.csv", "jumlah")) tgl = input("Tanggal pengembalian: ") # validasi tanggal if isTglValid(tgl): # ubah jumlah di gadget.csv jml_awal = readCSVdata("gadget.csv", getRow("gadget.csv", id_gadget), getCol("gadget.csv", "jumlah")) editCSVdata("gadget.csv", getRow("gadget.csv", id_gadget), getCol("gadget.csv", "jumlah"), jml_awal + jml_pinjam) # catat di gadget_return_history.csv if len(readCSV("gadget_return_history.csv") [1]) == 0: # jika ini entry pertama addCSVdata("gadget_return_history.csv", [0, id_peminjaman, tgl]) else: # jika ini entry selanjutnya id = int( readCSVdata("gadget_return_history.csv", (len( readCSV("gadget_return_history.csv")[1])) - 1, 0)) + 1 addCSVdata("gadget_return_history.csv", [id, id_peminjaman, tgl]) # edit is_returned di gadget_borrow_history.csv editCSVdata( "gadget_borrow_history.csv", getRow("gadget_borrow_history.csv", id_peminjaman), getCol("gadget_borrow_history.csv", "is_returned"), 1) print("Item", nama_gadget, "(x" + str(jml_pinjam) + ") telah dikembalikan.\n") # hapus gadget di inventori user inventori = "inventori_" + str(user_id) + ".csv" delCSVdata(inventori, getRow(inventori, id_gadget)) else: # isTglValid(tgl) == False print("Tanggal tidak valid!\n") else: # ~((no >= 1) & (no <= len(gadget_dipinjam))) print("Tidak ada barang dengan nomor peminjaman tersebut!\n") else: # len(data_dipinjam) print("Anda belum pernah meminjam gadget apapun.\n") else: # role != "User" print("Admin tidak perlu mengembalikan barang.\n")
def pinjam(role, user_id): # meminjam gadget. khusus user # KAMUS LOKAL # item_id, tgl, item # id, jml_pinjam, stok : int # ALGORITMA # validasi role User if role == "User": item_id = input("Masukkan ID item: ") if getRow("gadget.csv", item_id) != None: # ID item ada di database # cek lagi dipinjam atau ga if getRow("inventori_" + str(user_id) + ".csv", item_id) == None: # ID item tidak ada di inventori user tgl = input("Tanggal peminjaman: ") # validasi tanggal if isTglValid(tgl): jml_pinjam = int(input("Jumlah peminjaman: ")) if jml_pinjam > 0: if getRow("gadget.csv", item_id) != None: # ID item ada di database item = readCSVdata("gadget.csv", getRow("gadget.csv", item_id), getCol("gadget.csv", "nama")) stok = int( readCSVdata("gadget.csv", getRow("gadget.csv", item_id), getCol("gadget.csv", "jumlah"))) # validasi jumlah peminjaman if stok >= jml_pinjam: # ubah jumlah di gadget.csv editCSVdata("gadget.csv", getRow("gadget.csv", item_id), getCol("gadget.csv", "jumlah"), str(stok - jml_pinjam)) # catat ke gadget_borrow_history id = int( len( readCSV("gadget_borrow_history.csv") [1]) + 1) addCSVdata( "gadget_borrow_history.csv", [id, user_id, item_id, tgl, jml_pinjam, 0]) # catat ke inventory user rarity = readCSVdata( "gadget.csv", getRow("gadget.csv", item_id), 4) addCSVdata( "inventori_" + str(user_id) + ".csv", [item_id, item, rarity, str(jml_pinjam)]) print("Item", item, "(x" + str(jml_pinjam) + ")", "berhasil dipinjam!\n") elif stok == 0: print("Item", item, "gagal dipinjam karena stok habis.\n") else: # stok < jml_pinjam print( "Item", item, "gagal dipinjam karena jumlah peminjaman melebihi stok.\n" ) else: # jml_pinjam < 0 print("Jumlah peminjaman tidak valid!\n") else: # isTglValid(tgl) == False print("Tanggal tidak valid!\n") else: # ID item ada di inventori user print("Tidak bisa meminjam gadget yang sedang dipinjam") else: # ID tidak ada di database print("Tidak ada item dengan ID tersebut!\n") else: # role == "Admin" print("Admin tidak perlu melakukan peminjaman pada item.\n")
def gacha(role, user_id): # memberikan barang tertentu ke user secara pseudo-random. # chance dapat ditingkatkan dengan menambahkan barang dari inventory # KAMUS LOKAL # rarity: array[1..3] of array[1..2] of any # inventory: array of array of any # prompt, rarity_result: character # result, bekal: array[1..2] of any # gacha_result: array of any # stok_database, jml_result, id: integer # tgl: string # ALGORITMA # validasi role User if role == "User": rarity = [['B', 0], ['A', 0], ['S', 0]] inventory = filteritem(str(user_id)) # validasi inventory if len(inventory) > 0: prompt = 'y' while prompt in "Yy": # tambah chance dengan item di inventory result = korbaninitem(user_id, inventory) bekal = result[0] # rarity + persentase inventory = result[1] # sisa inventory # persentase ditambahkan ke rarity if bekal[0] == 'B': rarity[0][1] += bekal[1] elif bekal[0] == 'A': rarity[1][1] += bekal[1] elif bekal[0] == 'S': rarity[2][1] += bekal[1] # prompt mengulang tambah chance item prompt = input("Tambahkan item lagi? (y/n): ") if prompt not in 'YyNn': prompt = input("Tambahkan item lagi? (y/n): ") print("\nRolling...") time.sleep(2) # pilih rarity rarity_result = raritychooser(rarity) # pilih item dengan rarity sesuai gacha_result = chooser(searchrarity(rarity_result)) # cek stok database stok_database = int(readCSVdata("consumable.csv", getRow("consumable.csv", gacha_result[0]), getCol("consumable.csv", "jumlah"))) # pilih jumlah item yang diberikan sesuai stok database jml_result = numchooser(stok_database) # validasi jumlah yang diberikan if jml_result > 0: print("Selamat, anda mendapatkan", jml_result, gacha_result[1], "(Rank " + rarity_result + ")!") else: # jml_result == 0 print("Maaf, anda sedang tidak beruntung. Coba lagi.") # kurangi jumlah item hasil gacha di consumable.csv editCSVdata("consumable.csv", getRow("consumable.csv", gacha_result[0]), getCol("consumable.csv", "jumlah"), stok_database-jml_result) # tambah entry hasil gacha ke consumable_history.csv id = int(len(readCSV("consumable_history.csv")[1])+1) tgl = datetime.datetime.now().strftime('%d/%m/%Y') addCSVdata("consumable_history.csv", [id, user_id, gacha_result[0], tgl, jml_result]) else: # len(inventory) == 0 print("Inventory kosong. Anda tidak dapat melakukan gacha.") else: # role != user print("Admin tidak dapat melakukan gacha.")