SESI 05 : EDIT DAN DELETE TABEL BARANG
assalamualaikum warahmatullohi wabarohatuh, salam sukses. Mari kita lanjutkan coding kita.
pada bagian ke 5 (lima) ini kita akan melanjutkan proses CRUD terutama untuk edit dan delete data pada tabel master barang.
Disini kita butuh modul atau library kivy untuk menampilkan dialogbox, yaitu from kivymd.uix.dialog import MDDialog beserta modul buttonnya from kivymd.uix.button import MDFlatButton, bagian lain yang di sempurakan adalah class item barang, dimana pada class ini rencananya akan di panggil beberapa kali oleh class yang berbeda-beda jadi biar tidak buat class yang sama berulang-ulang, kit abuat seperti sebuah fungsi atau metod, rancangan yang akan dibuat seperti ini :
Jadi diclass Baran_Item akan kita tambahi variabel properties sebagai penampung class yang memanggil dan bentuk icon yang berbeda-beda sesuai kondisi class pemanggilnya, variabel properti yang dibutuhkan adalah bawaclass, iconkiri, iconkanan, dan kode barang. Sedangkan diclass Barang_New kita tambahi variabel propertis untuk membedakan ini isi data baru atau koreksi data yaitu datanew dan datakode, diclass ini juga kita buat 3 (tiga) function atau metod baru def on_enter, def kosongform, def isiform.
Sedangkan diclass utama kita yakti MyResto kita juga buat fuction atau metod baru yaitu def klik_ataskanan, def klik_ataskiri dan def hapus_barang. Untuk keterangan lebih lanjut dan rinci silahkan lihat videonya link diatas. Jadi selengkapnya file yang diubah menjadi seperti dibawah ini.
File main.py menjadi:
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.uix.screenmanager import ScreenManager,Screen
from kivy.properties import StringProperty
from kivymd.app import MDApp
from kivymd.uix.floatlayout import MDFloatLayout
from kivymd.uix.dialog import MDDialog
from kivymd.uix.button import MDFlatButton
# bila install manuual --> pip install pysqlite3
import sqlite3
Window.size = (400,600)
Builder.load_file('menu.kv')
Builder.load_file('barang.kv')
Builder.load_file('barang_item.kv')
Builder.load_file('barang_new.kv')
def buat_database():
conn = sqlite3.connect("data_resto.db")
mycursor = conn.cursor()
try:
mycursor.execute("select * from barang ")
except:
queri = "CREATE TABLE IF NOT EXISTS barang("\
"kode INTEGER PRIMARY KEY AUTOINCREMENT,"\
"jenis TEXT DEFAULT '',"\
"nama TEXT DEFAULT '',"\
"harga INTEGER DEFAULT 0,"\
"gambar TEXT DEFAULT '',"\
"status TEXT DEFAULT '') "
mycursor.execute(queri)
conn.commit()
conn.close()
class MenuUtama(Screen):
def buka_menubarang(self):
self.manager.transition.direction = 'left'
self.manager.current = 'MenuBarang'
class BarangItem(MDFloatLayout):
jenis = StringProperty ("Item Food")
nama = StringProperty ("Food No: 01")
harga = StringProperty ('10000')
gambar = StringProperty ("image/food01.png")
kode = StringProperty ("*")
iconkiri= StringProperty ("*")
iconkanan= StringProperty ("*")
bawaclass= StringProperty ("*")
class BarangNew(Screen):
datanew = StringProperty ("*")
datakode = StringProperty ("*")
def on_enter(self):
if BarangNew.datanew=='edit':
self.isiform()
else:
self.kosongform()
def kosongform(self):
self.ids.jenis.text =''
self.ids.nama.text=''
self.ids.harga.text=''
self.ids.gambar.text=''
self.ids.cetakgambar.source=''
BarangNew.datanew='*'
BarangNew.datakode='*'
def isiform(self):
carikode=BarangNew.datakode
conn = sqlite3.connect('data_resto.db')
conn.row_factory = sqlite3.Row
cur = conn.cursor()
cur.execute("SELECT * FROM barang where kode='"+carikode+"'")
daftarbarang = cur.fetchall()
conn.close()
for record in daftarbarang:
self.ids.jenis.text =record['jenis']
self.ids.nama.text=record['nama']
self.ids.harga.text=str(record['harga'])
self.ids.gambar.text=record['gambar']
self.ids.cetakgambar.source=record['gambar']
def tampilkan_gambar(self,lokasi):
self.ids.cetakgambar.source=lokasi
def simpan(self):
isijenis= self.ids.jenis.text.strip()
isinama = self.ids.nama.text.strip()
isiharga= '0' if self.ids.harga.text.strip()=='' else self.ids.harga.text
isigambar= self.ids.gambar.text.strip()
isistatus='kosong'
conn = sqlite3.connect("data_resto.db")
mycursor = conn.cursor()
if self.datanew=='edit':
carikode=self.datakode
queri = "UPDATE barang set jenis=?,nama=?,harga=?,gambar=?,status=? WHERE kode=?"
isinya=(isijenis,isinama,isiharga,isigambar,isistatus,carikode)
else:
queri = "INSERT INTO barang (jenis,nama,harga,gambar,status) VALUES (?,?,?,?,?)"
isinya=(isijenis,isinama,isiharga,isigambar,isistatus)
mycursor.execute(queri,isinya)
conn.commit()
conn.close()
self.kosongform()
self.manager.transition.direction = 'right'
self.manager.current = 'MenuBarang'
class MenuBarang(Screen):
def on_pre_enter(self):
self.ids.gridbarang.clear_widgets()
self.tampil_barang()
def tampil_barang(self):
conn = sqlite3.connect('data_resto.db')
conn.row_factory = sqlite3.Row
cur = conn.cursor()
cur.execute("SELECT * FROM barang ")
daftarbarang = cur.fetchall()
conn.commit()
conn.close()
for record in daftarbarang:
item=BarangItem()
item.bawaclass = 'MenuBarang'
item.iconkiri="delete-circle"
item.iconkanan="circle-edit-outline"
item.kode=str(record['kode'])
if record['jenis']=='1': item.jenis='Food'
if record['jenis']=='2': item.jenis='Drink'
if record['jenis']=='3': item.jenis='Snack'
item.nama=record['nama']
item.harga=str(record['harga'])
item.gambar=record['gambar']
self.ids.gridbarang.add_widget(item)
return self
class MyResto(MDApp):
def build(self):
buat_database()
sm = ScreenManager()
sm.add_widget(MenuUtama(name='MenuUtama'))
sm.add_widget(MenuBarang(name='MenuBarang'))
sm.add_widget(BarangNew(name='BarangNew'))
return sm
def klik_ataskanan(self,bwkelas,bwkode):
BarangNew.datanew = 'edit'
BarangNew.datakode = bwkode
self.root.current = 'BarangNew'
def klik_ataskiri(self,bwkelas,bwkode):
tombol_ok = MDFlatButton(text="OK", on_release=lambda x:self.hapus_barang(bwkode))
tombol_no = MDFlatButton(text="canc", on_release=lambda x:self.dialog.dismiss())
self.dialog = MDDialog(title="Konfirmasi",
text='Apakah anda yakin hapus..?',
radius=[20, 7, 20, 7],
buttons=[tombol_ok, tombol_no])
self.dialog.open()
def hapus_barang(self,kode):
self.dialog.dismiss()
conn = sqlite3.connect('data_resto.db')
cur = conn.cursor()
cur.execute("DELETE FROM barang where kode='"+kode+"'")
conn.commit()
conn.close()
self.root.current = 'MenuUtama'
self.root.current = 'MenuBarang'
MyResto().run()
File barang_item.kv menjadi :
<BarangItem>:
size_hint: .4,.3
line_color: rgba(0, 0, 0, 255)
MDBoxLayout:
size_hint: 1,.2
pos_hint: {'x':0,'y':.8}
md_bg_color: rgba(134, 250, 10, 255)
MDIconButton:
id:ataskiri
icon: root.iconkiri
icon_size: "20sp"
pos_hint_y: .5
on_release: app.klik_ataskiri(root.bawaclass,root.kode)
MDLabel:
id:atastengah
text: root.jenis
bold: True
halign: "center"
font_size:"14sp"
size_hint: .5,1
pos_hint_y: .5
MDIconButton:
id:ataskanan
icon: root.iconkanan
icon_size: "20sp"
pos_hint_y: .5
on_release: app.klik_ataskanan(root.bawaclass,root.kode)
MDBoxLayout:
size_hint: 1,.2
pos_hint: {'x':0,'y':0}
orientation: 'vertical'
padding:"5sp"
MDLabel:
text: root.nama
font_size:"12sp"
bold: True
MDLabel:
text: root.harga
font_size:"10sp"
MDBoxLayout:
size_hint:1,.6
pos_hint:{'x':0,'y':.2}
Image:
source:root.gambar
Dan file barang_new.kv menjadi :
<BarangNew>:
MDBoxLayout:
size_hint: 1,.1
pos_hint: {'x':0,'y':.9}
md_bg_color: rgba(0, 0, 255, 255)
MDLabel:
text: 'ENTRY ITEM BARANG'
color: rgba(255, 255, 255, 255)
halign: "center"
font_size: '30dp'
bold: True
MDFloatLayout:
size_hint: 1,.8
pos_hint: {'x':0,'y':.1}
md_bg_color: rgba(255, 255, 255, 255)
MDLabel:
text: 'Jenis Item'
text_color: 0, 0, 0, 1
size_hint: .3, .1
pos_hint: {"x":.1, "y": .8}
MDTextField:
id:jenis
input_filter: "int"
size_hint_x: .1
pos_hint: {"x":.4, "y": .8}
MDLabel:
text: 'Nama Item'
text_color: 0, 0, 0, 1
size_hint: .3, .1
pos_hint: {"x":.1, "y": .7}
MDTextField:
id:nama
size_hint_x: .5
pos_hint: {"x":.4, "y": .7}
MDLabel:
text: 'Harga Item'
text_color: 0, 0, 0, 1
size_hint: .3, .1
pos_hint: {"x":.1, "y": .6}
MDTextField:
id:harga
input_filter: "int"
size_hint_x: .5
pos_hint: {"x":.4, "y": .6}
MDLabel:
text: 'Alamat Gambar'
text_color: 0, 0, 0, 1
size_hint: .3, .1
pos_hint: {"x":.1, "y": .5}
MDTextField:
id:gambar
size_hint_x: .5
pos_hint: {"x":.4, "y": .5}
on_text: root.tampilkan_gambar(self.text)
MDBoxLayout:
size_hint: .4,.3
line_color: rgba(0, 0, 0, 255)
pos_hint: {'center_x':.5,'y':.1}
FitImage:
id:cetakgambar
source: ''
MDBoxLayout:
size_hint: 1,.1
pos_hint: {'x':0,'y':0}
md_bg_color: rgba(0, 255, 0, 255)
orientation: 'horizontal'
MDRectangleFlatButton:
text: "Batal"
text_color: rgba(0, 0, 255, 255)
line_color: rgba(0, 0, 255, 255)
md_bg_color: rgba(255, 255, 0, 255)
size_hint_x: .5
pos_hint: {"center_x": .5, "center_y": .5}
on_release:
root.manager.transition.direction = 'right'
root.manager.current = 'MenuBarang'
MDRectangleFlatButton:
text: "Simpan"
text_color: rgba(0, 0, 255, 255)
line_color: rgba(0, 0, 255, 255)
md_bg_color: rgba(255, 255, 0, 255)
size_hint_x: .5
pos_hint: {"center_x": .5, "center_y": .5}
on_release: root.simpan()
Demikian penjelasan sesi ke 5 (lima) ini, semoga bermanfaat, wassalamualaikum warohmatullohi wabarohatuh.
Komentar
Posting Komentar